无符号字符数组到宽字符数组/字符串
问题描述:
如何能/应该从unsigned char
数组投射到一个widechar数组wchar_t
或std::wstring
?我怎样才能将它转换回unsigned char
阵列?无符号字符数组到宽字符数组/字符串
或者OpenSSL可以从SHA256_Update
产生一个widechar散列?
答
尝试以下操作:
#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);
Сoncerning逆铸造看的例子here或只是再次使用mbstowcs
但与两个第一参数改变的地方。
另外WideCharToMultiByte function可以用于Windows开发,并且应该考虑设置区域设置(请参阅一些示例)。
UPDATE:
为了计算由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);
答
如何能/ I应该从一个无符号字符阵列投到一个widechar数组wchar_t或std :: wstring?我怎样才能将它转换回unsigned char数组?
他们是完全不同的,所以你应该不可以在大多数情况下这样做。如果你用真实的代码提供了一个具体的问题,那么我们可能会告诉你更多。
,或者可以OpenSSL的产生从SHA256_Update一个widechar哈希?
不,OpenSSL无法做到这一点。它产生的哈希是由字节组成的二进制字符串,而不是字符。您对演示详细信息负责,如窄/宽字符集或base64编码。
你最后的陈述*几乎*显示了你实际上*试图做的事情。显然你正在尝试散列一些东西。是你想要散列宽字符数据?你是否试图将哈希API返回的八位字节转换为十六进制字符('0x010AA02BB'等等)?在* * *的情况下,我希望你至少能够理解,散列摘要的结果不可读为asci(或unicode)十六进制字符数据,除非通过某种转换来完成。它只是一个字节序列。 – WhozCraig
@WhozCraig是的我想散列一个'std :: wstring',然后我想将它发布到我的服务器(所以转换回'std :: wstring'发布。哈希是我的身份验证令牌与服务器 –
所以你在散列一个'std :: wstring'(假设你不*散列终止wchar),然后把结果散列转换为char 0..9的'std :: wstring', ..f(十六进制字符)发布,然后接收器然后将其转换回八位组来验证散列?是否描述了您的工作流程?如果是这样,其中一个(第一个)可能是可以避免的,这取决于服务器的散列例如,假设你已经有一个将原始八位字节转换为十六进制字符的“std :: wstring”的例程。 – WhozCraig