unsigned char数组到宽字符数组/字符串

时间:2016-07-26 05:19:41

标签: c++ openssl widechar

我如何/应该从unsigned char数组转换为widechar数组wchar_tstd::wstring?如何将其转换回unsigned char数组?

或者OpenSSL可以从SHA256_Update生成一个widechar哈希值吗?

3 个答案:

答案 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编码。