C конвертировать шестнадцатеричный в десятичный формат - PullRequest
4 голосов
/ 24 марта 2009

Компиляция на Linux с использованием gcc.

Я хотел бы преобразовать это в гекс. 10 который был бы. Мне удалось сделать это с помощью приведенного ниже кода.

unsigned int index = 10;
char index_buff[5] = {0};
sprintf(index_buff, "0x%x", index);
data_t.un32Index = port_buff;

Однако проблема в том, что мне нужно присвоить его структуре и элемент, который мне нужно назначить, имеет тип unsigned int.

Это работает, однако:

data_t.un32index = 0xa;

Однако мой пример кода не работает, так как он думает, что я пытаюсь конвертировать из строки в беззнаковое целое.

Я пробовал это, но это также не удалось

data_t.un32index = (unsigned int) *index_buff;

Большое спасибо за любой совет,

Ответы [ 3 ]

13 голосов
/ 24 марта 2009

А? Десятичное / шестнадцатеричное значение не имеет значения, если у вас есть значение в переменной. Просто сделай

data_t.un32index = index;

Десятичные и шестнадцатеричные числа - это просто обозначения при печати чисел, чтобы люди могли их читать.

Для целочисленной переменной C (или C ++, или Java, или любого из ряда языков, где эти типы являются «примитивами» с семантикой, близко совпадающей с семантикой машинных регистров), значение, которое оно содержит, никогда не может быть названо «быть в шестнадцатеричном формате ".

Значение хранится в двоичном виде (во всех типичных современных электронных компьютерах, которые являются цифровыми и двоичными по своей природе) в памяти или регистрирует резервную копию переменной, и затем вы можете генерировать различные строковые представления, когда вам нужно выбрать база для использования.

7 голосов
/ 24 марта 2009

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

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *hex_value_string = "deadbeef";
    unsigned int out;

    sscanf(hex_value_string, "%x", &out);

    printf("%o %o\n", out, 0xdeadbeef);
    printf("%x %x\n", out, 0xdeadbeef);

    return 0;
}

Дает при выполнении:

emil@lanfear /home/emil/dev $ ./hex
33653337357 33653337357
deadbeef deadbeef
2 голосов
/ 24 марта 2009

Однако мой пример кода не работает, поскольку он думает, что я пытаюсь преобразовать строку в беззнаковое целое.

Это потому, что когда вы пишете следующее:

data_t.un32index = index_buff;

у вас у несоответствие типов. Вы пытаетесь присвоить массив символов index_buff для unsigned int, т.е. data_t.un32index.

Вы должны быть в состоянии назначить index, как предложено непосредственно, data_t.un32index.

...