4

使用 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;

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

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

data_t.un32index = (unsigned int) *index_buff;

非常感谢您的任何建议,

4

3 回答 3

13

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

data_t.un32index = index;

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

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

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

于 2009-03-24T10:12:45.510 回答
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
于 2009-03-24T10:20:25.337 回答
2

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

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

data_t.un32index = index_buff;

确实有类型不匹配。您正在尝试将字符数组分配index_buffunsigned intie data_t.un32index

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

于 2009-03-24T10:16:46.327 回答