我必须在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工作正常。 ¿我该如何解决?
您的转换以及错误格式说明符的选择会导致未定义的行为。根据变量的类型使用正确的格式说明符:
std::sscanf(test, ":CF%04" SCNx16 "%04" SCNx16 "%04" SCNx16,
&value1, &value2, &value3);