В настоящее время я работаю над приложением win32, которое использует sha1 ha sh для строк для генерации ключей для моей карты. Я хочу использовать ha sh как DWORD
, поэтому я могу вычислить некоторые вычисления между хэшами.
Поскольку sha1 ha sh воспроизводит 160-битные значения ha sh, я создал структуру с 5 DWORD
(32-разрядный * 5 = 160).
struct _SHA1_HASH
{
DWORD dwFirst;
DWORD dwSecond;
DWORD dwThird;
DWORD dwFourth;
DWORD dwFifth;
}SHA1_HASH;
И я хэшировал строку и сохранял в структуре.
void GenerateNodeKey()
{
// SHA-1 Hashing Process
// ex) strHash = 356A192B7913B04C54574D18C28D46E6395428AB
SHA1_HASH key;
string s_prefix = "0x";
key.dwFirst = strtol((s_prefix+strHash.substr(0,8)).c_str(), 0, 0); // first 8 bytes
...
...
key.dwFifth = strtol((s_prefix+strHash.substr(32,8)).c_str(), 0, 0); // last 8 bytes
}
Но проблема возникла, когда я попытайтесь напечатать значение, чтобы проверить, в порядке ли оно.
wcout << hex
<< "Node ID : " << key.dwFirst << key.dwSecond << key.dwThird << key.dwFourth << key.dwFifth
<< dec
<< endl;
Он печатает без проблем, если 8-байтовое шестнадцатеричное значение меньше 7FFFFFFF (2 147 483 647). Однако, когда оно больше значения, оно просто выводит максимальное число. Я искал в Интернете, чтобы увидеть, может ли DWORD
содержать большой размер, и это не составило проблемы (Связано: Какое наибольшее целое число 16, которое можно сохранить в переменной типа dword? )
Может кто-нибудь помочь? Заранее спасибо.