无符号字符数组到宽字符 array/string
unsigned char array to wide char array/string
如何 can/should 从 unsigned char
数组转换为宽字符数组 wchar_t
或 std::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 编码。
如何 can/should 从 unsigned char
数组转换为宽字符数组 wchar_t
或 std::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 编码。