C конвертировать шестнадцатеричный формат в десятичный
Вопрос
Компиляция в Linux с использованием gcc.
Я хотел бы преобразовать это в шестнадцатеричный формат.10, что будет а.Мне удалось это сделать с помощью кода ниже.
unsigned int index = 10;
char index_buff[5] = {0};
sprintf(index_buff, "0x%x", index);
data_t.un32Index = port_buff;
Тем не менее, проблема в том, что мне нужно назначить его структуре, а элемент, который мне нужно присвоить, - это тип int без знака.
Однако это работает:
data_t.un32index = 0xa;
Тем не менее, мой пример кода не работает так, как он думает, что я пытаюсь преобразовать из строки в Unsigned Int.
Я пробовал это, но это тоже не удалось
data_t.un32index = (unsigned int) *index_buff;
Большое спасибо за любой совет,
Решение
Хм?Десятичное/шестнадцатеричное число не имеет значения, если у вас есть значение в переменной.Просто делать
data_t.un32index = index;
Десятичные и шестнадцатеричные числа — это просто обозначения при печати чисел, чтобы люди могли их прочитать.
Для целочисленной переменной C (или C++, или Java, или любого из ряда языков, где эти типы являются «примитивами» с семантикой, близкой к семантике машинных регистров), никогда нельзя сказать, что хранимое ею значение «находится в шестнадцатеричном формате». .
Значение хранится в двоичном виде (во всех типичных современных электронных компьютерах, которые являются цифровыми и двоичными по своей природе) в памяти или регистре, поддерживающем переменную, и затем вы можете генерировать различные строковые представления, и именно тогда вам нужно выбрать базу для использовать.
Другие советы
Я согласен с предыдущими ответами, но решил поделиться кодом, который фактически преобразует шестнадцатеричную строку в целое число без знака, просто чтобы показать, как это делается:
#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
Однако мой пример кода не работает, поскольку думает, что я пытаюсь преобразовать строку в беззнаковое целое число.
Это потому, что когда вы пишете следующее:
data_t.un32index = index_buff;
ты делать есть несоответствие типов.Вы пытаетесь назначить массив символов index_buff
для unsigned int
то есть data_t.un32index
.
Вы должны иметь возможность назначить index
как было предложено непосредственно data_t.un32index
.