如何将char []十六进制字符数组转换为值的字节数组?

时间:2011-04-22 04:02:41

标签: c numbers char hex arduino

  

可能重复:
  Hex to char array in C

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

“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'之间的垃圾。

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