3

doubleを表すバイト配列があります。

char number[8];

これを実際のdouble(8バイトもあります)にキャストする必要があります。アドバイスに基づいて私はこれを試しましたが、失敗しました:

std::cout<<(*((*double)number))<<" is my number.\n";

なぜ失敗したのですか、どうすればよいですか?もちろん、魔法を使ってデータを抽出することはできますが、<<これはやりたくありません。メモリを消費し、コードの堅牢性が高くなりすぎます。

4

3 に答える 3

8

なぜ失敗したのですか?

ここにタイプミスがあります。

std::cout<<(*((*double)number))<<" is my number.\n";

そのはず:

std::cout<<(*((double*)number))<<" is my number.\n";

そして、私は何をすべきですか?

使用する括弧の数を減らすことができます。

std::cout<< *(double*)number <<" is my number.\n";

Cキャストの代わりにC++キャストを使用する必要があるため、何をしているのかが明確になります

std::cout<< *reinterpret_cast<double*>(number) <<" is my number.\n";
于 2013-03-17T18:24:15.593 に答える
3

C ++を使用する場合は、reinterpret_castを使用してください。ご覧のとおり、C++の方がはるかに表現力があります。

// cool c++
double value = *reinterpret_cast<double*>(number);

// c style
double value = (*((double*)number));
于 2013-03-17T18:22:15.113 に答える
1
char number[8];
double d;
// number is assumed to be filled with a buffer representing a double.
memcpy(&d, &number, sizeof(double));
std::cout << d;

sizeofが必要かどうかわからない。ダブルが8バイトであるという仮定がなされたとき、ダメージはすでに与えられていました。ダブルスについての基準で何を言っているのかわかりません。

于 2013-03-17T18:24:53.830 に答える