我如何/应该从unsigned char
数组转换为widechar数组wchar_t
或std::wstring
?如何将其转换回unsigned char
数组?
或者OpenSSL可以从SHA256_Update
生成一个widechar哈希值吗?
答案 0 :(得分:2)
尝试以下方法:
#include <cstdlib>
using namespace std;
unsigned char* temp; // pointer to initial data
// memory allocation and filling
// calculation of string length
wchar_t* wData = new wchar_t[len+1];
mbstowcs(&wData[0], &temp1[0], len);
Сoncerninganversecast会查看示例here或再次使用mbstowcs
,但会更改两个第一个参数的位置。
同样WideCharToMultiByte function对Windows开发也很有用,也应该考虑设置区域设置(参见一些示例)。
<强>更新强>
要计算unsigned char* temp
指向的字符串长度,可以使用以下方法:
const char* ccp = reinterpret_cast<const char*>(temp);
size_t len = mbstowcs(nullptr, &ccp[0], 0);
答案 1 :(得分:0)
std::setlocale(LC_ALL, "en_US.utf8");
const char* mbstr = "hello";
std::mbstate_t state = std::mbstate_t();
// calc length
int len = 1 + std::mbsrtowcs(nullptr, &mbstr, 0, &state);
std::vector<wchar_t> wstr(len);
std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state);
答案 2 :(得分:0)
我如何/应该从unsigned char数组转换为widechar数组wchar_t或std :: wstring?我怎样才能将它转换回unsigned char数组?
它们完全不同,因此在大多数情况下 不 应该这样做。如果您使用真实代码提供特定问题,我们可能会告诉您更多信息。
或者OpenSSL可以从SHA256_Update生成一个widechar哈希吗?
不,OpenSSL无法做到这一点。它产生的哈希值是二进制字符串,由字节组成,而不是字符。您负责演示详细信息,例如窄/宽字符集或base64编码。