具有十六进制值的Sscanf

时间:2019-03-05 11:48:11

标签: c++ scanf

我必须在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可以正常工作。 ¿如何解决?

1 个答案:

答案 0 :(得分:4)

您的转换和错误的格式说明符选择会导致未定义的行为。根据变量的类型使用正确的格式说明符:

std::sscanf(test, ":CF%04" SCNx16 "%04" SCNx16 "%04" SCNx16,
                      &value1,     &value2,     &value3);