C将十六进制转换为十进制格式

时间:2009-03-24 10:11:19

标签: c decimal hex

使用gcc在linux上编译。

我想将其转换为十六进制。 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;

但是,我的示例代码无效,因为它认为我正在尝试转换 从字符串到unsigned int。

我试过这个,但这也失败了

data_t.un32index = (unsigned int) *index_buff;

非常感谢任何建议,

3 个答案:

答案 0 :(得分:13)

咦?如果您在变量中有值,则十进制/十六进制无关紧要。只是做

data_t.un32index = index;

十进制和十六进制只是打印数字时的符号,因此人们可以阅读它们。

对于C(或C ++,或者Java,或者这些类型为“基元”的语言中的任何一种,其语义与机器寄存器的语义非常匹配)整数变量,它所拥有的值永远不会被称为“是用十六进制“。

该值保存在二进制文件中(在所有典型的现代电子计算机中,本质上是数字和二进制的)在内存或寄存器中备份变量,然后您可以生成各种字符串表示,这是您需要选择的时间一个可以使用的基地。

答案 1 :(得分:7)

我同意之前的答案,但我认为我会共享实际将十六进制字符串转换为无符号整数的代码,以显示它是如何完成的:

#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 :(得分:2)

  

但是,我的示例代码不起作用,因为它认为我试图从字符串转换为unsigned int。

这是因为当您编写以下内容时:

data_t.un32index = index_buff;

的类型不匹配。您正尝试将字符数组index_buff分配给unsigned int,即data_t.un32index

您应该可以直接将index分配给data_t.un32index