Блин, уже всё облазил, нигде не нашел... Вот в этой строке, находится хэш sha1: Code: byte result[20]; Мне нужно его отобразить в hex: Code: char Hex[41]; Byte2Hex(result, Hex); MessageBoxA(hWnd, Hex, "HEX", 0); Вот тут собственно и проблемы: Code: void Byte2Hex(byte bValue[], char lpBuff[]) { std::wostringstream oss; for(int i = 0; i < 20; ++i) oss << std::hex << std::setw(2) << std::setfill('0') << static_cast<unsigned>(bValue[i]); //std::copy(lpBuff, длина чего - то, bValue); strcpy(lpBuff, oss.str()); } 1. Я правильно указал?Скобки нужны? Может звездочку надо поставить? Byte2Hex(byte bValue[], char lpBuff[]) 2. как узнать длину byte bValue[]? А то i < 20... 3. Как записать в char lpBuff[] с нуль терминатором в конце, строку oss?
1. Компилятор на этот вопрос молчит? Компилирует что угодно и ничего не подсказывает? 2. Никак. Разве что передать ее в качестве аргумента. 3. Следи за мыслью: ты берешь набор байт, зачем-то пишешь в stringstream, причем для юникодных символов, потом вызываешь strcpy (который кстати копирует до первого нулл-байта, х), что будет эквивалентом 1 символа т.к. UTF-16, далее ты это хочешь вывести через месаджбокс, который ANSI (не юникодный, не UTF16). Внимание вопрос: зачем тут вообще С++? если нужен С++, то зачем работа с сишными функциями?
Разобрался почти, 1 ошибка, не могу найти как её убрать, вернее не знаю. Понимаю что разные операнды, а какие нужно х.з... Помогите, уже 4 дня торчу на этом моменте... В 19 строке: iss >> std::hex Code: #include <windows.h> #include <iostream> #include <sstream> #include <iomanip> void Byte2HexW(byte bValue[], size_t bSize, wchar_t * lpBuff) // В двухбайтовую строку { std::wostringstream oss; for (int i = 0; i < bSize; ++i) oss << std::hex << std::setw(2) << std::setfill(L'0') << static_cast<unsigned>(bValue[i]); wcscpy(lpBuff, oss.str().c_str()); } void HexW2Byte(wchar_t lpBuff[], byte bValue[]) // Из двухбайтовой строки { unsigned n; std::wstring s = lpBuff; for(size_t i = 0, j = 0; i < s.length(); i += 2, ++j) { std::wostringstream iss(s.substr(i, 2)); iss >> std::hex >> n; bValue[j] = n; } } int main(int argc, char ** argv) { setlocale(LC_ALL, "Russian"); byte result[72] = // Это какая - то строка... { 0xd0, 0xa2, 0xd0, 0xb5, 0xd0, 0xba, 0xd1, 0x81, 0xd1, 0x82, 0x20, 0xd0, 0xbf, 0xd1, 0x80, 0xd0, 0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb9, 0x2c, 0x20, 0x65, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x2c, 0x20, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2c, 0x20, 0xe4, 0xba, 0x8b, 0xe5, 0xa5, 0x89, 0xe8, 0x81, 0x96, 0xe7, 0xa6, 0xae, 0xe9, 0x87, 0x8b, 0x20, 0x2d, 0x20, 0xd0, 0xba, 0xd0, 0xbe, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x86, 0x2e }; wchar_t wHex[72 * 2 + 1]; Byte2HexW(result, 72, wHex); // В однобайтовую строку из byte byte bValue[72]; HexW2Byte(wHex, bValue); // Из однобайтовой строки в byte std::wcout << "Это многобайтовая строка hex : " << wHex << std::endl << "Это вообще не строка, byte : " << bValue << std::endl; system("pause"); }
Code: #include <iostream> #include <iomanip> #include <sstream> using namespace std; string bin2hex(unsigned char* buf, int len) { stringstream ss; for(int i = 0; i < len; ++i) ss << hex << setfill('0') << setw(2) << (int)buf[i]; return ss.str(); } int main() { unsigned char buf[20] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; cout << bin2hex(buf, sizeof(buf)) << endl; return 0; }