【问题标题】:Converting string back to byte array C++将字符串转换回字节数组 C++
【发布时间】: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 的环境中是否可用。
  • 您可能还想考虑:atoistrotoul

标签: c++ string type-conversion hex byte


【解决方案1】:

为此,您需要解析字符串并将各个值转换为字节。您可以使用 c 库中的 sscanf 函数来执行此操作。我不知道 arduino 是否有 sscanf 函数的实现。但我会先调查一下。如果没有,那么您将不得不编写一个函数来读取十六进制字符串的每个字符并将其转换为等效的 4 位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2011-12-18
    • 2018-01-26
    相关资源
    最近更新 更多