在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组

Convert (comma separated hex) String to unsigned char array in Arduino

本文关键字:字符串 十六进制 分隔 字符 无符号 数组 Arduino 转换      更新时间:2023-10-16

我的http请求的响应有效负载如下所示(但可以修改为最适合该任务的任何字符串(:

"{0X00,0X01,0XC8,0X00,0XC8,0X00,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}"

如何将其转换为包含十六进制值的无符号字符数组,如下所示:

unsigned char gImage_test[14] = { 0X00,0X01,0XC8,0X00,0XC8,0X00,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}

附加信息:有效负载字符串的长度是预先知道的,并且始终相同。由于 Arduino 对 c++ 的包装器性质的限制,我发现的一些部分解决方案无法直接应用。在Arduino IDE中寻找一个简单的解决方案。

使用sscanf("%x", ...),这里仅举了 3 个十六进制数的示例:

const char *buffer = "{0X00,0X01,0XC8}";
unsigned int data[3];
int read_count = sscanf(buffer, "{%x,%x,%x}", data, data+1, data+2);
// if successful read_count will be 3

如果使用sscanf()(#include <stdio.h>(在您的限制范围内,那么您可以使用它"%hhx"调用它将每个单独的十六进制值提取到如下所示的unsigned char中:

const int PAYLOAD_LENGTH = 14; // Known in advance
unsigned char gImage_test[PAYLOAD_LENGTH];
#include <stdio.h>
int main()
{
const char* bufferPtr = "{0X00,0X01,0XC8,0X00,0XC8,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF}";
for (int i = 0; i < PAYLOAD_LENGTH && sscanf(bufferPtr + 1, "%hhx", &gImage_test[i]); i++, bufferPtr += 5);
return 0;
}