【问题标题】:How to convert char[] array of hex characters to a byte array of values? [duplicate]如何将 char[] 十六进制字符数组转换为值的字节数组? [复制]
【发布时间】:2011-08-10 18:21:40
【问题描述】:

可能重复:
Hex to char array in C

我有一个包含十六进制字符的 char[10] 数组,我希望得到一个包含这些字符值的 byte[5] 数组。

一般来说,我将如何从 char[2] 十六进制值 (30) 转换为单个十进制字节 (48)?

语言实际上是 Arduino,但基本的 C 语言最好。

【问题讨论】:

  • 取决于字符集。对于 ASCII,我一直在每个 nybble 的值和字符值之间使用一个恒定的偏移量数组。因为一个字节最多是两个nybble。
  • 它不是现有问题的完全重复,但链接问题的 hex2bin 函数答案在这种情况下可以很好地进行修改。本质上,让它一次只对两个字符进行操作,并将一个 ref 传递给我的 char 数组。

标签: c numbers char hex arduino


【解决方案1】:

1 字节 = 8 位 = 2 x(十六进制数字)

您可以做的是将存储在一个字节中的十六进制数字左移 4 个位置(或者将我的 16 乘以),然后添加具有第二个十六进制数字的第二个字节。

所以要将十六进制的 30 转换为十进制的 48:

  1. 取第一个十六进制数字,这里是 3;乘以 16 得到 3*16 = 48
  2. 添加第二个字节,这里是0;得到 48+0 = 48,这是你的最终答案

【讨论】:

    【解决方案2】:

    “ch”中的字符数组,“out”中的字节数组

    byte conv[23] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15};
    
    // Loop over the byte array from 0 to 9, stepping by 2
    int j = 0;
    for (int i = 0; i < 10; i += 2) {
      out[j] = conv[ch[i]-'0'] * 16 + conv[ch[i+1]-'0'];
      j++;
    }
    

    未经测试。

    诀窍在于数组“conv”。它是一个 ASCII 表的片段,以字符 0 开头。-1 表示 '9' 和 'A' 之间的垃圾。

    哦,这也不是一个安全或防御性的例程。错误的输入导致崩溃、故障等。

    【讨论】:

      猜你喜欢
      • 2020-01-24
      • 2017-06-17
      • 2018-05-09
      • 2010-09-24
      • 2011-02-27
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多