【问题标题】:Converting char array into hex adress将字符数组转换为十六进制地址
【发布时间】:2022-01-03 15:24:50
【问题描述】:

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

请原谅我,我是一名电气工程师,也是一个女孩哈哈……

提前致谢。

【问题讨论】:

    标签: arrays char hex


    【解决方案1】:

    我假设您在 C 编程语言中要求这个,因此这个问题是微不足道的。以下代码应该可以工作,并且需要最少的库(stdio.hstdlib.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,并且@987654329 @ 等于 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
    0x12345678
    

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2020-06-14
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      相关资源
      最近更新 更多