Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:如何将带有md5哈希的wstring转换为字节*数组?_C++_Hash_Wstring - Fatal编程技术网

C++ C++;:如何将带有md5哈希的wstring转换为字节*数组?

C++ C++;:如何将带有md5哈希的wstring转换为字节*数组?,c++,hash,wstring,C++,Hash,Wstring,如何在摘要中获取md5哈希? 我的答案是: std::wstring hashStr(L"4727b105cf792b2d8ad20424ed83658c"); //.... byte digest[16]; wchar\u t*EndPtr; 对于(int i=0;i

如何在摘要中获取md5哈希? 我的答案是:

std::wstring hashStr(L"4727b105cf792b2d8ad20424ed83658c");

//....

byte digest[16];
wchar\u t*EndPtr;
对于(int i=0;i<16;i++){
std::wstring bt=hashStr.substr(i*2,2);
摘要[i]=静态演播(wcstoul(bt.c_str(),&EndPtr,16));
}

您需要从
hashStr
中读取两个字符,将它们从十六进制转换为二进制值,然后将该值放入
摘要中的下一个点中--

wchar_t * EndPtr;

for (int i = 0; i < 16; i++) {
std::wstring bt = hashStr.substr(i*2, 2);
digest[i] = static_cast<BYTE>(wcstoul(bt.c_str(), &EndPtr, 16));
}

对于(int i=0;i您需要从
hashStr
中读取两个字符,将它们从十六进制值转换为二进制值,并将该值放入
摘要中的下一个位置--

wchar_t * EndPtr;

for (int i = 0; i < 16; i++) {
std::wstring bt = hashStr.substr(i*2, 2);
digest[i] = static_cast<BYTE>(wcstoul(bt.c_str(), &EndPtr, 16));
}
for(inti=0;iC-way)(我没有测试它,但它应该可以工作(尽管我可能在某个地方搞砸了),而且你无论如何都会得到这个方法)

memset(摘要,0,sizeof(摘要));
对于(int i=0;i<32;i++)
{
wchar_t numwc=hashStr[i];
字节numbt;
如果(numwc>=L'0'&&numwcC-way(我没有测试它,但它应该可以工作(尽管我可能在某个地方搞砸了),那么无论如何你都会得到这个方法)

memset(摘要,0,sizeof(摘要));
对于(int i=0;i<32;i++)
{
wchar_t numwc=hashStr[i];
字节numbt;

如果(numwc>=L'0'&&numwc,它是一个
字节
数组,而不是
字节*
数组,它对于该字符串来说太小了。@jrok:
摘要
足够大;32个十六进制字符是16个字节。我需要摘要[0]==0x8c,摘要[1]==0x65,…这里的答案很好:@ildjarn我缺少什么?
hashStr.length()
是32,对吗?这是一个
字节
数组,而不是
字节*
数组,它对于那个字符串来说太小了。@jrok:
摘要
足够大;32个十六进制字符是16个字节。我需要摘要[0]==0x8c,摘要[1]==0x65,…这里的答案很好:@ildjarn我在这里缺少什么?
hashStr.length()
是32,对吗?
memset(digest, 0, sizeof(digest));

for (int i = 0; i < 32; i++)
{
    wchar_t numwc = hashStr[i];
    BYTE    numbt;

    if (numwc >= L'0' && numwc <= L'9')             //I assume that the string is right (i.e.: no SGJSGH chars and stuff) and is in uppercase (you can change that though)
    {
        numbt = (BYTE)(numwc - L'0');
    }
    else
    {
        numbt = 0xA + (BYTE)(numwc - L'A');
    }

    digest[i/2] += numbt*(2<<(4*((i+1)%2)));
}