【发布时间】:2014-12-31 03:29:27
【问题描述】:
我需要扫描 6 字节数据的十六进制表示并将其存储在 6 字节数组中。
请注意,我在嵌入式系统中,所以每个字节都很重要。
以这种方式使用 sscanf :
uint8_t buf[6];
char hex[13] = "123456789ABC";
sscanf(hex, "%02X%02X%02X%02X%02X%02X", &buf[0], &buf[1], &buf[2], &buf[3], &buf[4], &buf[5]);
正在溢出,因为每个 %02X 说明符都加载到 uint32_t 中。
- %02lX 将加载到 uint32_t 中
- %02hX 将加载到 uint16_t 中
是否有在 uint8_t 中加载的说明符? (我在任何地方都找不到)
还有其他方法吗?
我试过了:
sscanf(hex, "%08lX%04hX", &buf[0], &buf[4]);
这不会溢出,但是因为我是小端结构,所以顺序是混乱的......
【问题讨论】:
-
是否需要用大端结构表示?你的意思是订单搞砸了?
-
你试过无符号字符吗? - 又名 %c
-
代码正在加载到一个 6 字节的缓冲区中。建议使用 '%c' 而不是 '%02x' 加载。
-
并非所有嵌入式系统都受到严重的资源限制,因此一个不跟随另一个;你应该更具体地量化你的约束。从表面上看,如果你真的受到资源限制,你不会在一开始就使用 sscanf()。