无符号字符数组到宽字符 array/string

unsigned char array to wide char array/string

如何 can/should 从 unsigned char 数组转换为宽字符数组 wchar_tstd::wstring?我怎样才能将它转换回 unsigned char 数组?

或者 OpenSSL 可以从 SHA256_Update 生成宽字符散列吗?

尝试以下操作:

#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);

关于反向转换,请看示例 here 或再次使用 mbstowcs,但改变两个第一个参数的位置。

此外 WideCharToMultiByte function 对 Windows 开发很有用,还应考虑设置语言环境(参见一些示例)。

更新:

要计算 unsigned char* temp 指向的字符串的长度,可以使用以下方法:

const char* ccp = reinterpret_cast<const char*>(temp);
size_t len = mbstowcs(nullptr, &ccp[0], 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);

How can/should I cast from a unsigned char array to a widechar array wchar_t or std::wstring? And how can I convert it back to a unsigned char array?

它们完全不同,因此在大多数情况下您应该而不是这样做。如果您提供带有真实代码的特定问题,我们可能会告诉您更多信息。


Or can OpenSSL produce a widechar hash from SHA256_Update?

不,OpenSSL 不能这样做。它产生的哈希值是由字节组成的二进制字符串,而不是字符。您负责呈现细节,例如 narrow/wide 字符集或 base64 编码。