【发布时间】:2010-02-18 19:22:44
【问题描述】:
我无法让以下代码正常工作。使用在线 IEEE-754 转换器,我将(手动)写入 testData.txt 文件,该文件使用表示浮点数 75.5 的位字符串读取;实际的 cout.write 确实表明位字符串也符合我的预期。但是,当我尝试使用联合将 char* 强制转换为浮点数时(正如我所见,这是完成此转换的典型方法),结果浮点数不是我期望的数字。
#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;
}
运行this的返回结果为:
cout.write of input from file = 01000010100101110000000000000000
fToCharStarUnion.f = -1.61821e+38 bits = 01000010100101110000000000000000
我没有做一些基本的事情来使这项工作正常工作吗?
【问题讨论】:
标签: c++ c casting bit-manipulation coercion