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

StackOverflow https://stackoverflow.com/questions/676763

  •  21-08-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top