【问题标题】:Convert Byte array [in Hex] to Char array or String type + Arduino [duplicate]将字节数组 [十六进制] 转换为字符数组或字符串类型 + Arduino [重复]
【发布时间】:2017-06-25 17:18:29
【问题描述】:

我需要将十六进制的字节数组转换为字符串。

例如:

byte array[4] = {0xAB, 0xCD, 0xEF, 0x99};
//array[0] = 0xAB;
//array[1] = 0xCD;
//array[2] = 0xEF;
//array[3] = 0x99;

将上面转换为:

char number[9]; //Should be "ABCDEF99"

反之亦然。也就是将char数组转换为字节数组

char CardNumber[9] = "ABCDEF99";
byte j;
auto getNum = [](char c)
{
  return c > '9' ? c - 'a' + 10 : c - '0';
};

char arr[10];
char i;
byte *ptr = out;

for (i = 0; i < 8; i++)
{
  arr[i] = CardNumber[i];
}

for (char *index = arr ; *index ; ++index, ++ptr )
{
  *ptr = (getNum( *index++ ) << 4) + getNum(*index);
}

//Check converted byte values.
Serial.print("Card Number in Bytes :");
for (j = 0; j < 4; j++)
{
  Serial.print(out[j], HEX );
}
Serial.println();

【问题讨论】:

  • 从技术上讲,文字字符串 "ABCDEF99" 是一个由 9 个 字符组成的数组(您忘记了字符串终止符)。
  • @Someprogrammerdude 是的!已编辑。
  • @JLH 他想要相反。
  • @LearnerLearner 你为什么接受这个骗局?这与你想要的相反。而你已经拥有了。

标签: arrays arduino


【解决方案1】:

您需要遍历数组并将两个字符(每个半字节)添加到字符串缓冲区。
最后添加空终止符。

void array_to_string(byte array[], unsigned int len, char buffer[])
{
    for (unsigned int i = 0; i < len; i++)
    {
        byte nib1 = (array[i] >> 4) & 0x0F;
        byte nib2 = (array[i] >> 0) & 0x0F;
        buffer[i*2+0] = nib1  < 0xA ? '0' + nib1  : 'A' + nib1  - 0xA;
        buffer[i*2+1] = nib2  < 0xA ? '0' + nib2  : 'A' + nib2  - 0xA;
    }
    buffer[len*2] = '\0';
}

然后你将它用作:

byte array[4] = {0xAB, 0xCD, 0xEF, 0x99};
char str[32] = "";
array_to_string(array, 4, str);
Serial.println(str);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 2021-04-13
    • 2018-03-24
    • 2018-05-09
    • 1970-01-01
    • 2021-10-31
    • 2019-02-12
    相关资源
    最近更新 更多