gpt4 book ai didi

c++ - 比特流到浮点型强制

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:43 24 4
gpt4 key购买 nike

我无法让以下代码正常工作。使用在线 IEEE-754 转换器,我(手动)写入了 testData.txt 文件,该文件使用表示 float 75.5 的位串读取;实际的 cout.write 确实表明位串也如我所料。但是,当我尝试使用 union 将 char* 强制转换为 float 时(如我所见,这是完成此转换的典型方法),得到的 float 不是我期望的数字。

#include<climits>
#include<iostream>
#include<fstream>
#include<bitset>

int main( int, char** )
{

std::ifstream inputFile( "testData.txt", std::ios_base::in | std::ios_base::binary );
if( !inputFile ) std::cout << "Failed to open input file!" << std::endl;

char buffer[ CHAR_BIT * sizeof(float) ];
inputFile.read( buffer, CHAR_BIT * sizeof(float) );

std::cout << "cout.write of input from file = ";
std::cout.write( buffer, CHAR_BIT * sizeof(float) );
std::cout << std::endl;

union { float f; char* c; } fToCharStarUnion;

fToCharStarUnion.c = buffer;
std::bitset< sizeof(float) * CHAR_BIT > bits( std::string( fToCharStarUnion.c ) );
std::cout << "fToCharStarUnion.f = " << fToCharStarUnion.f << " bits = " << bits << std::endl;

inputFile.close();
return 0;
}

运行返回结果为:

cout.write of input from file = 01000010100101110000000000000000
fToCharStarUnion.f = -1.61821e+38 bits = 01000010100101110000000000000000

有什么基本的我没有做的事情可以使这项工作正常进行吗?

最佳答案

您的 union 需要包含一个 char 数组而不是一个指针。

union { float f; char c[sizeof(float)]; } float2char;

然后您还必须担心字节序; c[0] 是 float 的指数端,或尾数的尾部。 (答案会因您的硬件而异——Intel 与 PPC 或 SPARC 或……)

关于c++ - 比特流到浮点型强制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2291533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com