无符号字符数组到宽字符数组/字符串

unsigned char array to wide char array/string

本文关键字:数组 字符 字符串 无符号      更新时间:2023-10-16

如何从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);

С注意反向投射,请看这里的例子,或者只需再次使用mbstowcs,但要更改两个第一个自变量的位置。

WideCharToMultiByte函数对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);

如何/应该从无符号char数组转换为宽char数组wchar_t或std::wstring?如何将其转换回无符号的char数组?

它们完全不同,所以在大多数情况下,您应该而不是这样做。如果你用真实的代码提供一个特定的问题,我们可能会告诉你更多。


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

不,OpenSSL无法做到这一点。它产生的散列是由字节而非字符组成的二进制字符串。您负责演示文稿的详细信息,如窄/宽字符集或base64编码。