2013-06-03 4 views
1

У меня есть следующие строки Cпреобразовать строку в целое число в шестнадцатеричной C

"72e4247d3c91f424c62d909d7c1553a5" 

Он состоит из 32 шестнадцатеричных цифр. Это массив с 4 целыми числами в шестнадцатеричном виде. Как я могу вернуть числа в виде целых чисел из этого массива?

+1

32 цифры, содержащие только одно число. Что касается того, как вы можете вернуть их - есть ли у вас код, который сделал первоначальное преобразование? Просто отмените это. Скорее всего, принимайте по 8 цифр за раз и конвертируйте их в целое представление, возможно используя sscanf(). – mah

+0

@mah проверить мой ответ, это работает? –

+0

Существует несколько десятков способов конвертировать символ hex в двоичный файл. (Но у вас действительно есть символ hex, или это просто шестнадцатеричный дамп двоичного значения строки?) –

ответ

0

Вы попробовали strtol?

int val = (int) strtol (hex_string, NULL, 16); 

Повторите на подстроках, если это сплющенный массив.

С уважением

3

Вам придется разобрать четыре 32-бит/8 шестнадцатеричных цифр ломти отдельно. Самый простой способ сделать это

#include <stdint.h> 
#include <stdlib.h> 
#include <string.h> 

void parse_hex4(char const *str, uint32_t num[4]) 
{ 
    char buf[9]; // 8 hex digits + NUL 

    buf[8] = '\0'; 
    for (int i=0; i<4; i++) { 
     memcpy(buf, str + i * 8, 8); 
     num[i] = strtoul(buf, NULL, 16); 
    } 
} 

str Это предполагает нулевой набивочный быть длиной ровно 32 символов, и это не делает никакой проверки ввода. Если вы используете компилятор из Редмонда, который равен stuck in the 1980, используйте unsigned long вместо uint32_t.

+0

Не ваша функция должна добавить терминатор в 'buf' и добавить' str + = 8'? – simonc

+0

@simonc: спасибо, добавил, что и оговорка, что строка должна быть правильно дополнена. –

+0

Мне кажется, вы можете столкнуться с преданностью. –

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