c 中从字符串到十六进制数组的 long int

问题描述 投票:0回答:1

我正在尝试将十进制数字作为字符串(例如“4000”),并将其转换为可用的十六进制值。 4000 的十六进制是 FA0。这显然不适用于看起来像这样的十六进制数组;

uint8_t hex_array[6] = {0xaa, 0xbb, 0xcc ...}

我的十进制字符串范围是 0-8916,当 int 不太长时就可以了...

到目前为止我所做的是:

int val = (int)strtol(str_input, (char **)NULL, 10);
sprintf(ui8_hex,"%x",val);
for(int m = 0; m < 2; m++){
    sscanf(&ui8_hex[m], "%2hhx", &output[m+2]);
    printf("0x%02x ",output[m+2]);
}

问题是我在输出[2]和输出[3]中得到的分别是'0xfa''0xa0'。当我想要的是输出[2]=0x0f 输出[3]=0xa0

非常感谢任何帮助!

arrays c string hex
1个回答
0
投票

谢谢大家的帮助。

我已经实现了埃里克(Eric)的解决方案(你的假设是正确的)并且它符合我的要求。

但是,我此后所做的另一个解决方案是更改输入并将其整体分辨率从 12 位降低到 8 位。它不是最好的,但是对于代码的使用方式来说,它是有效的。

int map12bit(int value) { return (int)((uint32_t)(value * 8192) / 255); }

为了清楚地说明如何使用它,它基本上从 JSON 字符串转换为十六进制,其中下一个传输层需要十六进制:)

再次感谢!

© www.soinside.com 2019 - 2024. All rights reserved.