4

それで。私は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

3 に答える 3

4

たとえば、4バイトの16進数として表される1は00000001。どうやらあなたはリトルエンディアンのシステムを使用しているようです。したがって、ファイルを検査するときは明らかに後ろから前への順序付けです。

于 2013-02-04T22:09:24.783 に答える
3

16進ダンプは、2バイトを1つの単語としてグループ化し、エンディアンを変更しています。ほとんどのシステムでは、を使用hexdump -Cすると、ダンプが標準ビューに変更され、グループ化が妨げられます。16進数では、1文字が1つのニブルを表し、1バイトあたり2つのニブルがあります。したがって、4バイトintには合計8つのニブルが必要です。あなたの数は非常に少ないので、あなたのニブルのほとんどは0です。

于 2013-02-04T22:14:52.843 に答える
2

出力内のバイトの大きさを誤解していると思います。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バイトの例から最もよくわかるように、私もあなたのようなリトルエンディアンのマシンを使用しています。

于 2013-02-04T22:09:35.833 に答える