我正在为我的STM32 C编写软件,以便在通过UART从我的计算机程序中接收到某个地址值时从闪存读取数据。计算机程序按顺序向我发送一个值(即,我希望读取数据的1,2,3,4,5,6,7,8 ->地址),我正在将它读取到一个char数组中(char地址= 1;2;3;4;5;6;7;8)。到目前为止还有效。为了从接收到的地址值中读取数据,我需要将这个char转换为一个十六进制地址(即int十六进制地址= 0x12345678)。有人知道如何在脚印尽可能小的情况下做到这一点吗?
请饶恕我,我是一名电气工程师,同时也是…高层的一个女孩。
提前谢谢。
发布于 2022-01-07 22:30:22
我假设您是在C编程语言中要求这样做,因此这个问题是微不足道的。下面的代码应该可以工作,并且需要最少的库(stdio.h和stdlib.h)。我还假设十六进制char数组总是有8位数字,因此是64位数。
int hex_str_to_int(char hexdata[8])
{
int ret = 0x00;
for (int i = 0; i < 8; i++) { // assuming your hexdata will always be a string of 8 hex chars
if (hexdata[7-i] >= 'A') ret += ((hexdata[7-i] - 55) << (4*i));
else if (hexdata[7-i] >= '0') ret += ((hexdata[7-i] - 48) << (4*i));
}
return ret;
}上面的代码遍历您的char hexdata[8]数组,如果索引处的字母数字字符(逆)是一个数字> 'A',那么它将减去55,使'A'等于10,'F'等于15。然后它将这个值右移4*I位,并将其添加到返回值中。当字符介于0-9之间时,也会发生类似的情况,但是减法常数是48来定位0到9之间的值。
以下功能可应用于以下方面:
int main()
{
char hex_data[8] = {'1', '2', '3', '4', '5', '6', '7', '8'};
printf("0x%08x\n", hex_str_to_int(hex_data));
return 0;
}其中产出:
$ ./a.out
0x12345678https://stackoverflow.com/questions/70567930
复制相似问题