преобразование строки в гекс - PullRequest
0 голосов
/ 11 марта 2012

У меня есть строка с 0111111100000000000000000000101

Я хотел преобразовать это в hex, поэтому я использовал код ниже

    int assembledHex;
    sscanf(buffer, "%x", &assembledHex);
    printf("this is the assembled hex %x\n",assembledHex);

но когда я его печатаю, это дает мне 101. Я думал, что sscanf может конвертировать в шестнадцатеричный формат строки, что я делаю неправильно и как я могу это исправить. Я хочу получить результат 0x3F800005

Ответы [ 2 ]

0 голосов
/ 11 марта 2012

Ваш sscanf читает строку как HEX, но строка записывается в двоичном виде.Вы получаете «101», потому что int может хранить только первые 8 цифр - каждая цифра составляет 4 бита, поэтому две цифры = 8 бит = 1 байт, а 8 цифр - 4 байта, что составляет размер int.Таким образом, вы на самом деле храните «00000101», покупка printf не печатает начальные нули, поэтому вы получаете «101».

0 голосов
/ 11 марта 2012

Это не проверено или что-то, а также довольно медленно, но это быстрый старт:

unsigned int bin_to_int(const char *s) {
    int i;
    unsigned int result;

    result = 0;

    if (s[0] == '1') result++;

    for (i = 1; i < strlen(s); i++) {
        result <<= 1;

        if (s[i] == '1') {
            result++;
        }
    }

    return result;
}
...