C преобразовать шестнадцатеричный формат в десятичный

Компиляция под 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;

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


person ant2009    schedule 24.03.2009    source источник


Ответы (3)


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

data_t.un32index = index;

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

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

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

person unwind    schedule 24.03.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
person Emil H    schedule 24.03.2009

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

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

data_t.un32index = index_buff;

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

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

person dirkgently    schedule 24.03.2009