【问题标题】:C convert hex to decimal formatC 将十六进制转换为十进制格式
【发布时间】:2010-10-15 04:11:39
【问题描述】:

使用 gcc 在 linux 上编译。

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

但是,我的示例代码不起作用,因为它认为我正在尝试转换 从字符串到无符号整数。

我试过了,但也失败了

data_t.un32index = (unsigned int) *index_buff;

非常感谢您的建议,

【问题讨论】:

    标签: c decimal hex


    【解决方案1】:

    嗯?如果变量中有值,十进制/十六进制无关紧要。做吧

    data_t.un32index = index;
    

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

    对于一个 C(或 C++,或 Java,或许多语言中的任何一种,这些类型是“原语”,其语义与机器寄存器的语义非常接近)整数变量,它所持有的值永远不能说是“是十六进制”。

    该值以二进制形式保存在内存或支持变量的寄存器中(在所有典型的现代电子计算机中,本质上都是数字和二进制),然后您可以生成各种字符串表示形式,这就是您需要选择的时候使用的基础。

    【讨论】:

      【解决方案2】:

      我同意前面的答案,但我想我会分享实际将十六进制字符串转换为无符号整数的代码,只是为了展示它是如何完成的:

      #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
      

      【讨论】:

        【解决方案3】:

        但是,我的示例代码不起作用,因为它认为我正在尝试从字符串转换为无符号整数。

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

        data_t.un32index = index_buff;
        

        确实有一个类型不匹配。您正在尝试将字符数组index_buff 分配给unsigned int,即data_t.un32index

        您应该能够按照建议将index 直接分配给data_t.un32index

        【讨论】:

          猜你喜欢
          • 2017-07-31
          • 2013-07-20
          • 2012-06-17
          • 1970-01-01
          • 2011-07-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多