2016-10-11 2 views
-2

У меня есть строка шестнадцатеричных значений, и мне нужно, чтобы она выводилась в массив символов, чтобы он мог использоваться как вход функции.Преобразование шестнадцатеричной строки в массив char

std::string firststring = "baaaaaaa"; 
char bufferascii[128]; 
std::string firsthash = sha512(firststring); 
firsthash.copy(bufferascii, 128,0); 
char buffer[64]; 
for(int i=0; i<64; i++) { 
    char temp[4]; 
    temp[0] = bufferascii[i*2]; 
    temp[1] = bufferascii[(i*2)+1]; 
    temp[2] = 0; 
    int temp0; 
    sscanf(temp, "%x", &temp0); 
    buffer[i] = (char)temp0; 
    printf("%02x", buffer[i]); printf(" "); 
} 

Обратите внимание, что выход SHA512 (firststring) будет

810dcbf236457fee732f100d261c101412e04fc08abd4cb6ddd4442a7cb690acfcae6eeec25e321d5cf5d63174a3b38b31c0143a5702f5f28a43f38b10742853

Тем не менее, этот код вместо печати:

ffffff81 0d ffffffcb fffffff2 36 45 7f ffffffee 73 2f 10 0d 26 1c 10 14 12 ffffffe0 4f ffffffc0 ffffff8a ffffffbd 4c ffffffb6 ffffffdd ffffffd4 44 2a 7c ffffffb6 ffffff90 ffffffac fffffffc ffffffae 6e f fffffee ffffffc2 5e 32 1d 5c fffffff5 ffffffd6 31 74 ffffffa3 ffffffb3 ffffff8b 31 ffffffc0 14 3a 57 02 fffffff5 fffffff2 ffffff8a 43 fffffff3 ffffff8b 10 74 28 53

код работает, когда я определить буфер, как:

unsigned char buffer[64]; 

К сожалению, Я не могу передать этот массив без знака в следующую функцию, которая требует ввода массива char. Я предполагаю, что это означает, что мой компилятор использует подписанные символы.

Что мне здесь не хватает? Любая помощь будет принята с благодарностью.

+2

'Е ("% 02X", (без знака символов) буфер [I]);' –

ответ

1

Ваша архитектура имеет char со знаком. Каждый целочисленный тип с рангом менее int составляет int или unsigned int при передаче в качестве аргумента вариационной функции. Подписанное продвижение сохраняет знак. Вот почему вы получаете 0xFFFFFF с предварительными значениями до 128 (0x80).

Вы можете решить проблему отображения путем литья значение для unsigned char или, еще лучше, uint8_t:

printf("%02x", (uint8_t)buffer[i]) 
+0

проблема в том, что мне нужно ввести знаковые значения char для ввода в следующую функцию. Правильные значения хранятся в буфере, и это просто проблема с отображением? – Phil

+0

Вот почему я предлагаю лить только для функции печати. Ваши данные верны, но они меняются (как описано в ответе) на пути к стандартным выводам – krzaq

Смежные вопросы