0

C++ の 2 進数について一般的な質問があります。32 ビット数値のバイナリ ファイルを読み込んでから、これらの数値をテキスト ファイルに書き込んでいます。私の質問は、私がするときです

long int temp;
temp = ( fileBuf[N * 4 * i + 4 * j + 0] << 24 |
         fileBuf[N * 4 * i + 4 * j + 1] << 16 |
         fileBuf[N * 4 * i + 4 * j + 2] << 8  | 
         fileBuf[N * 4 * i + 4 * j + 3] << 0  );
myfile1 << temp << "\t";

c++ は、バイナリを 10 進数として再解釈することを理解していますか?

4

3 に答える 3

1

C++int変数内のすべての数値は 2 進数です。10 進数への変換または 10 進数からの変換は、数値が読み取られるか書き込まれるとき、またはコンパイラが定数からコードに変換するときに発生します。

于 2012-07-24T20:39:37.257 に答える
1

私がこの質問を「これで私の望みどおりになるだろうか?」と解釈すると、その場合、答えはyesです。ただし、オフセットで 32 ビットのビッグ エンディアン整数をバッファー (おそらくファイルからロード) から読み取る場合に限ります4 * N * i + 4 * j

もちろん、fileBuf が文字型または符号なし文字型として宣言されていると仮定します。たとえば、short の配列の場合は、動作が異なります。64 ビット量の不完全な表現になってしまいます。

于 2012-07-24T20:39:45.587 に答える
0

いいえ。実際には、最後の行に出力するまで数値は 10 進数に変換されません。

于 2012-07-24T20:39:19.240 に答える