テキストファイルとバイナリファイル
fread
バイナリファイルで使用されるはずのテキストファイルで関数を誤用します。テキスト ファイルは、バイナリ ファイルとは異なります。
たとえば、txt を 4 つのASCII 文字 "1"
, "2"
, "3"
,で保存した場合"4"
、実際にディスクに保存されるのは1
, 2
,3
ではありません4
。代わりに、それは ACSII コードです: 49
, 50
, 51
, 52
. したがって、sizeof(a[0])
バイトをに読み込むと、次a[0]
のように 4 バイトがメモリに読み込まれます。
Memory Address Byte In Memory Little-endian
0x12345678 00110001 <----least significant byte
0x12345679 00110010
0x12345680 00110011
0x12345681 00110100 <----most significant byte
(アドレスは説明のために偽造されていることに注意してください)
エンディアンネス
これらの 4 バイトを整数に変換する方法については、すべてエンディアンと関係があります。つまり、プラットフォームがリトル エンディアン (Intel x86 プロセッサなど) の場合、00110001
最下位メモリ アドレス ( 0x12345678
) の最初のバイト ( ) が整数を形成する最下位バイトになります。
最終的に、整数は00110100001100110011001000110001
2 進数、つまり875770417
10 進数になります。