我正在做一些维护工作,遇到类似以下的事情:
std::string s;
s.resize( strLength );
// strLength is a size_t with the length of a C string in it.
memcpy( &s[0], str, strLength );
Run Code Online (Sandbox Code Playgroud)
我知道使用&s [0]如果它是std :: vector会是安全的,但是这是std :: string的安全使用吗?
大家好,我是C++的新手,任何人都知道如何将BSTR转换为const char*?
我独立学习C++,我有一个问题,我不能解决超过一周的问题.我希望你能帮助我.
我需要获取Unicode字符串的SHA1摘要(如??????),但我不知道如何做到这一点.
我尝试这样做,但它返回错误的摘要!
因为wstring('?')
它返回 - A469A61DF29A7568A6CC63318EA8741FA1CF2A7
我需要 -8dbe718ab1e0c4d75f7ab50fc9a53ec4f0528373
关心并抱歉我的英语:).
CryptoPP 5.6.2 MVC++ 2013
#include <iostream>
#include "cryptopp562\cryptlib.h"
#include "cryptopp562\sha.h"
#include "cryptopp562\hex.h"
int main() {
std::wstring string(L"?");
int bs_size = (int)string.length() * sizeof(wchar_t);
byte* bytes_string = new byte[bs_size];
int n = 0; //real bytes count
for (int i = 0; i < string.length(); i++) {
wchar_t wcharacter = string[i];
int high_byte = wcharacter & 0xFF00;
high_byte = high_byte >> 8;
int low_byte = wcharacter & 0xFF; …Run Code Online (Sandbox Code Playgroud) 主要原因是因为我通过套接字发送 Unicode 数据(字节,而不是字符),并且我想确保字节序匹配,因为 wchar_t 是 UTF16。
接收程序也是我的另一个程序,所以我会知道它是 UTF16 并且能够做出相应的反应。
这是我目前的算法,这种算法有效,但结果很奇怪。(这是在同一个应用程序中,因为我想在发送之前学习如何转换它)
case WM_CREATE: {
//Convert String to NetworkByte
wchar_t Data[] = L"This is a string";
char* DataA = (char*)Data;
unsigned short uData = htons((unsigned int)DataA);
//Convert String to HostByte
unsigned short hData = ntohs(uData);
DataA = (char*)&hData;
wchar_t* DataW = (wchar_t*)DataA;
MessageBeep(0);
break;
}
Run Code Online (Sandbox Code Playgroud)
结果:
??????????????????This is a string
Run Code Online (Sandbox Code Playgroud) 我有一个Windows应用程序,其中的字符串类型WCHAR*.我需要将其转换char*为传递给C API.我正在使用MultiByteToWideChar和WideCharToMultiByte执行转换功能.
但由于某种原因,转换是不恰当的.我在输出中看到很多胡言乱语.以下代码是此 stackoverflow答案中的修改版本.
WCHAR* convert_to_wstring(const char* str)
{
int size_needed = MultiByteToWideChar(CP_UTF8, 0, str, (int)strlen(str), NULL, 0);
WCHAR* wstrTo = (WCHAR*)malloc(size_needed);
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)strlen(str), wstrTo, size_needed);
return wstrTo;
}
char* convert_from_wstring(const WCHAR* wstr)
{
int size_needed = WideCharToMultiByte(CP_UTF8, 0, wstr, (int)wcslen(wstr), NULL, 0, NULL, NULL);
char* strTo = (char*)malloc(size_needed);
WideCharToMultiByte(CP_UTF8, 0, wstr, (int)wcslen(wstr), strTo, size_needed, NULL, NULL);
return strTo;
}
int main()
{
const WCHAR* wText = L"Wide string"; …Run Code Online (Sandbox Code Playgroud) 它必须与C程序一起工作,因此它必须是一个winapi c调用