加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 将二进制转换为浮点值的计算器 – 我做错了什么?

发布时间:2020-12-16 03:33:07 所属栏目:百科 来源:网络整理
导读:我有以下代码,它以二进制形式将6个浮点数写入磁盘并将其读回: #include iostream#include cstdioint main(){ int numSegs = 2; int numVars = 3; float * data = new float[numSegs * numVars]; for (int i = 0; i numVars * numSegs; ++i) { data[i] = i *
我有以下代码,它以二进制形式将6个浮点数写入磁盘并将其读回:
#include <iostream>
#include <cstdio>

int main()
{
  int numSegs = 2;
  int numVars = 3;

  float * data = new float[numSegs * numVars];
  for (int i = 0; i < numVars * numSegs; ++i) {
    data[i] = i * .23;
    std::cout << data[i] << std::endl;
  }

  FILE * handle = std::fopen("./sandbox.out","wb");

  long elementsWritten = 
    std::fwrite(data,sizeof(float),numVars*numSegs,handle);

    if (elementsWritten != numVars*numSegs){
      std::cout << "Error" << std::endl;
    }

    fclose(handle);
    handle = fopen("./sandbox.out","rb");

    float * read = new float[numSegs * numVars];

    fseek(handle,SEEK_SET);

    fread(read,numSegs*numVars,handle);

    for (int i = 0; i < numVars * numSegs; ++i) {
      std::cout << read[i] << std::endl;
    }
}

它输出:

0
0.23
0.46
0.69
0.92
1.15
0
0.23
0.46
0.69
0.92
1.15

当我以hexer加载文件时,我们得到:

00 00 00 00 1f 85 6b 3e  1f 85 eb 3e d7 a3 30 3f
1f 85 6b 3f 33 33 93 3f  -- -- -- -- -- -- -- --

我想直接从小数计算浮点值.例如:1f 85 6b 3e变为0.23,1f 85 eb 3e变为0.46.

我在网上尝试了一些“二进制浮动”计算器.当我输入数字的十六进制表示,0x1f856b3e时,在两个计算器中我都回来了5.650511E-20
.但我认为该值应为0.23,因为我向计算器提供了字节5-8,这些字节代表写入磁盘的第二个浮点数.

我究竟做错了什么?

解决方法

如果你举例如这是一个 endianness问题:
1f 85 6b 3e

至:

3e 6b 85 1f

当你使用你的一个转换器转换它时,这将导致.23,例如我使用IEEE 754 Converter和Floating Point to Hex Converter允许你进行双精度转换和单精度转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读