したがって、次のコードを使用して整数を char[] または unsigned char[] に入れています
(unsigned???) char test[12];
test[0] = (i >> 24) & 0xFF;
test[1] = (i >> 16) & 0xFF;
test[2] = (i >> 8) & 0xFF;
test[3] = (i >> 0) & 0xFF;
int j = test[3] + (test[2] << 8) + (test[1] << 16) + (test[0] << 24);
printf("Its value is...... %d", j);
タイプ unsigned char と値 1000000000 を使用すると、正しく印刷されます。
タイプ char (同じ値) を使用すると、98315724 が出力されますか?
それで、問題は本当に何が起こっているのか説明できる人はいますか??
2 つの異なる数値のバイナリを調べても、何が起こっているのかまだわかりません。MSB が負の値を示すために 1 に設定された場合、signed だと思いました (ただし、負の文字? wth?)
バッファーに何を挿入するか、内容をどのように解釈するかを明示的に伝えているので、なぜこれが起こるのかわかりません。
調べた内容を明確にするために、以下にバイナリ/16 進数を含めました。
11 1010 1001 1001 1100 1010 0000 0000 // 983157248 のバイナリ
11 1011 1001 1010 1100 1010 0000 0000 // 1000000000 のバイナリ
3 A 9 9 CA 0 0 // 983157248 の 16 進数
3 B 9 ACA 0 0 // 1000000000 の 16 進数