热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在c++中以-0x1.0c7474fp+8的形式解析包含十六进制的文件?

如何解决《如何在c++中以-0x1.0c7474fp+8的形式解析包含十六进制的文件?》经验,为你挑选了1个好方法。

我试图解析data.txt包含以下形式的十六进制的文件-0x1.0c7474fp+8:

-0x1.e51b67p+0 0x1.0b18ef5p+8 0x1.9c6075p+8 -0x1.190d44p+4
-0x1.e4f7838p+0 0x1.0b6446dp+8 0x1.9d779b8p+8 -0x1.16436ap+3
-0x1.e4555bp+0 0x1.0b6d446p+8 0x1.9e28c4ap+8 -0x1.1f8b0ep+3
-0x1.e3b9598p+0 0x1.0b7982cp+8 0x1.9edf5f8p+8 -0x1.f80bc6p+2
-0x1.e2f5896p+0 0x1.0b70bd7p+8 0x1.9f75c6ap+8 -0x1.07390ep+3
-0x1.e21d2dep+0 0x1.0b5961cp+8 0x1.9fef6e6p+8 -0x1.031012p+3
-0x1.e225b96p+0 0x1.0bbc104p+8 0x1.a12c75cp+8 -0x1.06951cp+3
-0x1.e17ec4cp+0 0x1.0bc35b7p+8 0x1.a1de5a6p+8 -0x1.25f138p+3
-0x1.e0e7f36p+0 0x1.0c140edp+8 0x1.a300c22p+8 -0x1.417644p+3
-0x1.e0e7e0ap+0 0x1.0c7474fp+8 0x1.a43f084p+8 -0x1.359f22p+3
-0x1.e076e6cp+0 0x1.0c93aebp+8 0x1.a50efaap+8 -0x1.00e406p+4
-0x1.e1c339cp+0 0x1.0ec7d62p+8 0x1.ab2777p+8 -0x1.1b6134p+3
-0x1.e0614eap+0 0x1.0e669d1p+8 0x1.ab301b8p+8 -0x1.6a997cp+2
-0x1.e01577p+0 0x1.0e9f2e5p+8 0x1.ac33c36p+8 -0x1.62eb42p+2
-0x1.de237dcp+0 0x1.0df5506p+8 0x1.abd2c42p+8 -0x1.8951c2p+2

我写这段c++代码没有任何成功:

#include 
#include 

int main()
{
    float a, b, c, d;

    std::ifstream ifs("data.txt");

    int n = 0;
    while(ifs >> std::hex >> a
              >> std::hex >> b
              >> std::hex >> c
              >> std::hex >> d)
    {
        std::cout <while(ifs >> std::hex >> a
          >> std::hex >> b
          >> std::hex >> c
          >> std::hex >> d)

while(ifs >> std::hexfloat >> a
          >> std::hexfloat >> b
          >> std::hexfloat >> c
          >> std::hexfloat >> d)

并且你的编译器支持C++ 11和hexfloat(G ++有点滞后)你应该好好去.

编辑:G ++在包含std::hexfloat在标题中是滞后的.不幸的是,截至今天,GCC 8.2,支持std::hexfloat是不完整的,不起作用.这个答案对Asker不起作用.

编辑2:我应该为此摔倒我的剑,但幸运的是我没有剑.在我痴迷于解释为什么这在C++中不起作用并试图找到一种礼貌的方式使这个工作在C++中,我完全忘记了这在C中工作得很好的事实.

由于std::hexfloat在C++标准的措辞被整理出来的时候被搁置,让我们按照Git-R完成!原理,使用C,并将其包装在一个函数中,以便以后可以很容易地用惯用的C++替换它.

#include 
#include 

int main()
{
    float a, b, c, d;

    FILE *f = fopen("data.txt", "r");

    if (f == NULL)
    {
        std::cerr <<"Unable to open file."
        return -1;
    }
    int n = 0;
    while(fscanf(f, "%a %a %a %a", &a, &b, &c, &d) == 4)
    {
        std::cout <
            var cpro_id = "u6885494";

        
        
    
推荐阅读
author-avatar
大西guoguo_120
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有