sscanf无法读取双十六进制

时间:2019-05-01 01:49:31

标签: c++ c scanf visual-c++-2013

我需要在文本文件中使用其他ascii值保留某些双精度数的确切二进制表示形式,因此我按照this问题中的建议使用“%a”。

fprintf (pFile, "Scale: %a, %a, %a\n", scale.x, scale.y, scale.z);

但是,当我尝试用“%la”读取时,scanf返回读取的0项。

double x=0, y=0, z=0;
fgets(buf, sizeof buf, pFile);
int test = sscanf (buf, "Scale: %la, %la, %la\n", &x, &y, &z);
// test is zero!

当我打开调试器时,我看到字符串缓冲区完全符合我的预期。

  

buf ...“比例尺:0x1.fc70e3p-1、0x1.fc70e3p-1、0x1.fc70e3p-1 \ n” ...   字符[1000]

那它为什么不读呢?

根据Nate Eldredge的要求,这是我的MCVE版本:

#include <stdio.h>
int main(int argc, char *argv[])
{
    double x=0, y=0, z=0;
    const char* buf = "Scale: 0x1.fc70e3p-1, 0x1.fc70e3p-1, 0x1.fc70e3p-1\n";
    int test = sscanf(buf, "Scale: %la , %la , %la", &x, &y, &z);
    // test is zero!
}

注意:我正在使用MS Visual Studio 2013

第二注:我需要将源代码和数据文件发送给第三方,后者拥有自己的编译器。因此,保存格式必须相对独立于平台。

1 个答案:

答案 0 :(得分:1)

Microsoft VS2013 strtodsscanfistringstream等没有实施c99 c ++ 11标准,并且不能< / strong>解析十六进制浮点数或十六进制双精度点。