在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组
Convert (comma separated hex) String to unsigned char array in Arduino
我的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;
}
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 指向存储在字符串 c++ 中的十六进制
- 如何在C++中将十六进制字符串转换为文本数据
- 使用 sprintf 将十六进制0xAABBCC转换为字符串"AA:BB:CC"
- 定义宏以将前缀 0x 添加到十六进制字符串文本
- 如何使用 setfill 和 setw 在字符串变量中存储十六进制值
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组
- 将 std::string( "x3BxDEx7C" ) 转换为可读的十六进制字符串?
- C++ 将十六进制字符串表示形式转换为十六进制字符串表示形式
- 字符数组到十六进制字符串的转换 - 意外输出
- C++将 wwn 字符串转换为识别为十六进制的数据类型
- 将字符串存储为十六进制而不进行转换
- C++:格式化包含十六进制值的字符串
- 字符串十六进制到指针获取值
- 如何从字符串十六进制中获取十进制
- Arduino:将字符串十六进制"#FFFFFF"转换为 3 int