16進ダンプするプログラム(C言語)

損害を補償しないことについて

このサイトを閲覧して生ずるいかなる損害も補償いたしません。

16進ダンプするプログラム(C言語)

このコーナーでは、【16進ダンプするプログラム(C言語)】をのせています。

Cサンプル001の説明

ファイルの先頭512バイトを16進ダンプするプログラムを作成しました。コマンドプロンプトのプログラムです。ファイル名は第1引数で指定します。引数をしていしない場合は標準入力を読み込んで、先頭512バイトを16進ダンプします。このプログラムは自分でファイルを調査したいときに便利なように作りました。ただ、自分で作って自分で実行するという考えなので、エラー処理などはとても雑で、他人から見るとわかりにくいことと思います。ソースファイル名は、hd512.cとしました。実行ファイル名は、hd512としました。

ソースファイルと実行結果

ソースファイルと実行例を次に示します。

hd512実行結果

簡単に説明します。第1引数でファイル名を指定します。自分でそれがわかっているので、引数が2つ以上あっても、第1引数だけを見ています。ファイルが存在しない場合や、アクセスできない場合は、単に終了します。メッセージは出ません。ただ、mainから1を返しているので、
echo %errorlevel%
とすると、1が出るはずです。

引数が1つもない場合は、標準入力から読み込みます。

先頭から1バイトずつ、最大で512バイト読み込みます。EOFに達したら読込終了です。1行で16バイトずつ、16進ダンプの結果を出力します。左側に、先頭からのオフセットを16進4桁で表示します。

最後に、読み込んだ総バイト数を16進4桁で表示します。512バイト以上のファイルなら、読み込んだ総バイト数は512になります。

標準入力から読み込む方法は、echoコマンドで調べたい文字列を出力し、パイプでつなげると便利です。対話的に使う方法には向いていない作りとなっています。

パイプを使わず、hd512だけを、引数なしで起動すると、stdinと表示され、入力待ちになります。文字列を入力してEnterキーを押すと、とても見にくいのですが、16進ダンプの結果が出て、さらに入力待ちになります。コントロール+Cで中断できます。

文字コードの概要[3f]まで

[3f]までの文字コードの概要を書きます。16進法での値を2桁で書いて角カッコ[]で囲み、コロン:を置いて右側に文字そのもの、文字の説明またはメモを書きます。文字そのものは、ここでは半角文字で表示します。
[00]:制御文字NUL(ヌル文字)
[09]:制御文字HT(水平タブ)
[0a]:制御文字LF(改行)
[0d]:制御文字CR(復帰)
[20]: (空白)
[21]:!(エクスクラメーションマーク)
[22]:”(ダブルクォーテーション)
[23]:#(ナンバーサイン(シャープという人が多い))
[24]:$(ドル記号)
[25]:%(パーセント)
[26]:&(アンパサンド)
[27]:’(シングルクォーテーション)
[28]:((始め丸カッコ)
[29]:)(終わり丸カッコ)
[2a]:*(アスタリスク)
[2b]:+(プラス記号)
[2c]:,(カンマ)
[2d]:-(ハイフン、マイナス)
[2e]:.(ピリオド)
[2f]:/(スラッシュ)
[30]:0(ゼロ)
[31]:1(イチ)
[32]:2(ニ)
[33]:3(サン)
[34]:4(ヨン)
[35]:5(ゴ)
[36]:6(ロク)
[37]:7(ナナ)
[38]:8(ハチ)
[39]:9(キュウ)
[3a]::(コロン)
[3b]:;(セミコロン)
[3c]:<(小(しょう)なり)
[3d]:=(イコール)
[3e]:>(大(だい)なり)
[3f]:?(クエスチョンマーク)

文字コードの概要[40]から[5b]まで

[40]から[5b]までの概要を書きます。16進法での値を2桁で書いて角カッコ[]で囲み、コロン:を置いて右側に文字そのもの、文字の説明またはメモを書きます。文字そのものは、ここでは半角文字で表示します。
[40]:@(アットマーク)
[41]:A
[42]:B
[43]:C(英大文字シー)
[44]:D
[45]:E
[46]:F
[47]:G
[48]:H
[49]:I(英大文字アイ)
[4a]:J
[4b]:K
[4c]:L(英大文字エル)
[4d]:M
[4e]:N
[4f]:O(英大文字オー)
[50]:P(英大文字ピー)
[51]:Q
[52]:R
[53]:S(英大文字エス)
[54]:T
[55]:U(英大文字ユー)
[56]:V(英大文字ブイ)
[57]:W(英大文字ダブリュー)
[58]:X(英大文字エックス)
[59]:Y
[5a]:Z(英大文字ゼット、ズィー)
[5b]:[(始め角カッコ)

[40]から[5b]は、シフトJISの2バイト目の可能性があります。

文字コードの概要[5c]

[5c]の文字コードの文字コードの概要を書きます。16進法での値を2桁で書いて角カッコ[]で囲み、コロン:を置いて右側に文字そのもの、文字の説明またはメモを書きます。文字そのものは、ここでは全角文字で表示します。
[5c]:¥(円記号)(JIS X 0201)
[5c]:\(バックスラッシュ)(ASCII)

[5c]は、シフトJISの2バイト目の可能性があります。

文字コードの概要[5d]から[7d]まで

[5d]から[7d]までの文字コードの概要を書きます。16進法での値を2桁で書いて角カッコ[]で囲み、コロン:を置いて右側に文字そのもの、文字の説明またはメモを書きます。文字そのものは、ここでは半角文字で表示します。
[5d]:](終わり角カッコ)
[5e]:^(サーカムフレックス)
[5f]:_(アンダースコア)
[60]:`(バッククォート)
[61]:a
[62]:b
[63]:c(英小文字シー)
[64]:d
[65]:e
[66]:f
[67]:g
[68]:h
[69]:i(英小文字アイ)
[6a]:j
[6b]:k
[6c]:l(英小文字エル)
[6d]:m
[6e]:n
[6f]:o(英小文字オー)
[70]:p(英小文字ピー)
[71]:q
[72]:r
[73]:s(英小文字エス)
[74]:t
[75]:u(英小文字ユー)
[76]:v(英小文字ブイ)
[77]:w(英小文字ダブリュー)
[78]:x(英小文字エックス)
[79]:y
[7a]:z(英小文字ゼット、ズィー)
[7b]:{(始め波カッコ)
[7c]:|(縦線)
[7d]:}(終わり波カッコ)

[5d]から[7d]は、シフトJISの2バイト目の可能性があります。

文字コードの概要[7e]

[7e]の文字コードの概要を書きます。16進法での値を2桁で書いて角カッコ[]で囲み、コロン:を置いて右側に文字そのもの、文字の説明またはメモを書きます。文字そのものは、ここではチルダは半角文字で、オーバーラインは全角文字で表示します。
[7e]:~(チルダ)(ASCII)
[7e]: ̄(オーバーライン)(JIS X 0201)

[7e]は、シフトJISの2バイト目の可能性があります。

文字コードの概要[7f]

[7f]の文字コードの概要を書きます。16進法での値を2桁で書いて角カッコ[]で囲み、コロン:を置いて右側に文字の説明またはメモを書きます。
[7f]:制御文字DEL(削除)

文字コードの概要[80]以降

シフトJISに関するメモ
[81]から[9f]なら、シフトJISの1バイト目の可能性があります。
[a1]から[df]なら、半角カタカナの可能性があります。
[e0]から[fc]なら、シフトJISの1バイト目の可能性があります。
[80]から[fc]なら、シフトJISの2バイト目の可能性があります。

UTF-8に関するメモ
[80]~[bf]なら、2バイト以上の文字の2バイト目以降の可能性があります。
[c0]~[df]なら、2バイト文字の1バイト目の可能性があります。
[e0]~[ef]なら、3バイト文字の1バイト目の可能性があります。
[f0]~[f7]なら、4バイト文字の1バイト目の可能性があります。
UTF-8のBOMは
[ef] [bb] [bf]
です。

下の「コピー」ボタンを押すと、このページのタイトルとURLがクリップボードにコピーされます。

タイトルとURLをコピーしました