将字符串转换回字节数组 C++
Converting string back to byte array C++
所以我有一个包含十六进制值字节数组的字符串。
我想弄清楚如何从字符串返回到原始字节数组。
我正在使用基于 Arduino 的开发板。
简单的说,我想转这个:
char addr3[47] = "0x28, 0xB6, 0x4C, 0x4E, 0x0D, 0x00, 0x00, 0x86";
回到这个:
byte addr2[8] = {0x28, 0xB6, 0x4C, 0x4E, 0x0D, 0x00, 0x00, 0x86};
感谢您的帮助。
编辑,这是我在 answers/comments:
之后想出的解决方案
开始于:
char addr3[47] = "0x28, 0xB6, 0x4C, 0x4E, 0x0D, 0x00, 0x00, 0x86";
我运行字符串通过这个:
sscanf(addr3, "%x", &r1);
sscanf(addr3, "%*s %x", &r2);
sscanf(addr3, "%*s %*s %x", &r3);
sscanf(addr3, "%*s %*s %*s %x", &r4);
sscanf(addr3, "%*s %*s %*s %*s %x", &r5);
sscanf(addr3, "%*s %*s %*s %*s %*s %x", &r6);
sscanf(addr3, "%*s %*s %*s %*s %*s %*s %x", &r7);
sscanf(addr3, "%*s %*s %*s %*s %*s %*s %*s %x", &r8);
byte addr[8] = {r1,r2,r3,r4,r5,r6,r7,r8};
然后我们得到:
byte addr[8] = 28B64C4ED0086
虽然不是我正在寻找的确切格式,但它可以工作。
为此,您需要解析字符串并将各个值转换为字节。您可以使用 c 库中的 sscanf 函数来执行此操作。我不知道arduino是否有sscanf函数的实现。但我会先调查一下。如果没有,那么您将不得不编写一个函数来读取十六进制字符串的每个字符并将其转换为 4 位等价物。
所以我有一个包含十六进制值字节数组的字符串。
我想弄清楚如何从字符串返回到原始字节数组。
我正在使用基于 Arduino 的开发板。
简单的说,我想转这个:
char addr3[47] = "0x28, 0xB6, 0x4C, 0x4E, 0x0D, 0x00, 0x00, 0x86";
回到这个:
byte addr2[8] = {0x28, 0xB6, 0x4C, 0x4E, 0x0D, 0x00, 0x00, 0x86};
感谢您的帮助。
编辑,这是我在 answers/comments:
之后想出的解决方案开始于:
char addr3[47] = "0x28, 0xB6, 0x4C, 0x4E, 0x0D, 0x00, 0x00, 0x86";
我运行字符串通过这个:
sscanf(addr3, "%x", &r1);
sscanf(addr3, "%*s %x", &r2);
sscanf(addr3, "%*s %*s %x", &r3);
sscanf(addr3, "%*s %*s %*s %x", &r4);
sscanf(addr3, "%*s %*s %*s %*s %x", &r5);
sscanf(addr3, "%*s %*s %*s %*s %*s %x", &r6);
sscanf(addr3, "%*s %*s %*s %*s %*s %*s %x", &r7);
sscanf(addr3, "%*s %*s %*s %*s %*s %*s %*s %x", &r8);
byte addr[8] = {r1,r2,r3,r4,r5,r6,r7,r8};
然后我们得到:
byte addr[8] = 28B64C4ED0086
虽然不是我正在寻找的确切格式,但它可以工作。
为此,您需要解析字符串并将各个值转换为字节。您可以使用 c 库中的 sscanf 函数来执行此操作。我不知道arduino是否有sscanf函数的实现。但我会先调查一下。如果没有,那么您将不得不编写一个函数来读取十六进制字符串的每个字符并将其转换为 4 位等价物。