首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符数组转换为十六进制入口

将字符数组转换为十六进制入口
EN

Stack Overflow用户
提问于 2022-01-03 15:24:50
回答 1查看 20关注 0票数 0

我正在为我的STM32 C编写软件,以便在通过UART从我的计算机程序中接收到某个地址值时从闪存读取数据。计算机程序按顺序向我发送一个值(即,我希望读取数据的1,2,3,4,5,6,7,8 ->地址),我正在将它读取到一个char数组中(char地址= 1;2;3;4;5;6;7;8)。到目前为止还有效。为了从接收到的地址值中读取数据,我需要将这个char转换为一个十六进制地址(即int十六进制地址= 0x12345678)。有人知道如何在脚印尽可能小的情况下做到这一点吗?

请饶恕我,我是一名电气工程师,同时也是…高层的一个女孩。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-01-07 22:30:22

我假设您是在C编程语言中要求这样做,因此这个问题是微不足道的。下面的代码应该可以工作,并且需要最少的库(stdio.hstdlib.h)。我还假设十六进制char数组总是有8位数字,因此是64位数。

代码语言:javascript
复制
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之间的值。

以下功能可应用于以下方面:

代码语言:javascript
复制
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;
}

其中产出:

代码语言:javascript
复制
$ ./a.out
0x12345678
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70567930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档