【发布时间】:2021-12-02 09:35:17
【问题描述】:
所以我有一个包含十六进制值字节数组的字符串。
我想弄清楚如何从字符串返回到原始字节数组。
我正在使用基于 Arduino 的开发板。
简单地说,我想转这个:
char addr3[47] = "0x28, 0xB6, 0x4C, 0x4E, 0x0D, 0x00, 0x00, 0x86";
回到这个:
byte addr2[8] = {0x28, 0xB6, 0x4C, 0x4E, 0x0D, 0x00, 0x00, 0x86};
感谢您的帮助。
编辑,这是我按照答案/cmets 提出的解决方案:
开始于:
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
虽然不是我想要的确切格式,但它会起作用。
【问题讨论】:
-
你尝试了什么?您能否展示您编写的代码,并解释您无法解决的问题?我们不会在 Stackoverflow 上为其他人编写代码,但我们可以回答问题并指出可能存在的问题。
-
提示:
std::istringstream. -
@SamVarshavchik 我无法解决的问题是从该字符串返回字节数组。我曾尝试使用 memcpy,但我认为这不是正确的道路。我觉得我错过了一些东西。你知道有没有办法做到这一点?
-
@ThomasMatthews 谢谢你的提示。调查它,但不确定在我的基于 Arduino 的环境中是否可用。
-
您可能还想考虑:
atoi和strotoul。
标签: c++ string type-conversion hex byte