具有十六进制值的Sscanf

问题描述 投票:0回答:1

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

c++ scanf
1个回答
4
投票

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

std::sscanf(test, ":CF%04" SCNx16 "%04" SCNx16 "%04" SCNx16,
                      &value1,     &value2,     &value3);
© www.soinside.com 2019 - 2024. All rights reserved.