それで。私はfwrite()を試してきました。
私のシステムではsizeof(int)=4です。1、2、3、4、5、6を含むintの配列があります。
バイナリファイルに書き込んでhexdumpで表示すると、次のようになります。
0000000 0001 0000 0002 0000 0003 0000 0004 0000
0000010 0005 0000 0006 0000
0000018
4バイトの値の間にゼロを書き込むのは何ですか?
たとえば、4バイトの16進数として表される1は00000001
。どうやらあなたはリトルエンディアンのシステムを使用しているようです。したがって、ファイルを検査するときは明らかに後ろから前への順序付けです。
16進ダンプは、2バイトを1つの単語としてグループ化し、エンディアンを変更しています。ほとんどのシステムでは、を使用hexdump -C
すると、ダンプが標準ビューに変更され、グループ化が妨げられます。16進数では、1文字が1つのニブルを表し、1バイトあたり2つのニブルがあります。したがって、4バイトint
には合計8つのニブルが必要です。あなたの数は非常に少ないので、あなたのニブルのほとんどは0です。
出力内のバイトの大きさを誤解していると思います。8ビットを完全に表すには、2桁の16進数が必要です。int
あなたの例からの1つのシングルは次のとおりです。
0001 0000
16ではなく32ビットデータ(または8ビットデータ)として表示したい場合があります。これにより、ダンプが奇妙に見えます。
私はあなたのバイナリファイルを複製od
し、いくつかの異なるオプションで実行しました。うまくいけば、あなたは例が啓発的であることがわかります:
$ od -t x4 example
0000000 00000001 00000002 00000003 00000004
0000020 00000005 00000006
0000030
$ od -t x2 example
0000000 0001 0000 0002 0000 0003 0000 0004 0000
0000020 0005 0000 0006 0000
0000030
$ od -t x1 example
0000000 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00
0000020 05 00 00 00 06 00 00 00
0000030
1バイトと4バイトの例から最もよくわかるように、私もあなたのようなリトルエンディアンのマシンを使用しています。