次のコードを正しく動作させるのに問題があります。オンラインの IEEE-754 コンバーターを使用して、浮動小数点数 75.5 を表すビット文字列が読み取られる testData.txt ファイルに (手動で) 書き出しました。実際の cout.write は、ビット文字列も期待どおりであることを示しています。ただし、ユニオンを使用して 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
これを正しく機能させるために、私が行っていない基本的なことはありますか?