我必须在c ++中解析具有十六进制值的char数组:
char test[20] = ":CF0100020003000400";
从测试中,我必须获得0200(512),0300(768)和0400(1024)。我想将这些值保存为uint16_t类型。
uint16_t value1;
uint16_t value2;
uint16_t value3;
sscanf(test, ":CF%*04x%04x%04x%04x", (int *)&value1, (int *)&value2, (int *)&value3);
我只获得了最后一个值(value3 = 1024),但是value1和value2为0。但是,如果变量为int,则在强制转换时,sscanf可以正常工作。 ¿如何解决?
答案 0 :(得分:4)
您的转换和错误的格式说明符选择会导致未定义的行为。根据变量的类型使用正确的格式说明符:
std::sscanf(test, ":CF%04" SCNx16 "%04" SCNx16 "%04" SCNx16,
&value1, &value2, &value3);