16進ってなに?
えーっと・・・これに関しては説明するのが難しいですね・・・私、コンピュータに関してはホント若造ですし文才もありませんから(というか私も16進の事をよく理解していない)。でもこのことは改造するにあたって必須ですから、おぼろげながらでも理解しましょう。改造するために絶対必要な専門用語みたいなもんです。ではとりあえず説明してみましょう・・・
※以下の文は以前このサイトの掲示板で書かれたものを若干修正(言い換えれば手抜きともいう)したものです。転載許可を下さった3E70さん、本当にありがとうございます。
まずはバイナリエディタの事
バイナリエディタというのは文字通りバイナリで編集するアプリケーションのことです。バイナリ(=binary)とは、2進という意味でもあります。
まぁ、機械が扱ってる値(データ)を最も生に近い形で編集するアプリケーションです。生でデータを扱うので、扱うデータの構造を詳しく知らないと、正しく編集できません。しかし、知っていれば値を直接いじることができるので強力な武器となります。改造には必須のアイテムです。これしか編集する方法がないですから。バイナリエディタについての詳しい操作方法は、ダウンロードした時に付属でついてくるreadme.txtやヘルプを見て下さい。ここで説明しているときりがないので・・・すみません。16進、わかりやすい(つもりの)説明
16進(=hexadecimal)というのは日常私たちが使っている10進(=decimal)とは考え方が違います。なぜ私たちが使い慣れている10進を使わないのかというと、コンピュータが実際に値を操作しているのは2進(=binary)だからです。2進数をかみくだいていってしまうとスイッチのオン・オフのようなものです。 このスイッチがもう数えきれないほどのものが複雑に組み合わさってコンピュータは動いていると思うといいでしょう。ですが、2進数を実際に私たち人間の見えるように表すと10011110だの、11111111だの、はたからみたらいくつなんだかさっぱりです。これを16進になおすと、9EやFFとなります。 こうすれば158や255であることは少しはわかりやすくなります。これでもわかりにくいんですけど・・・とおっしゃる方もいるでしょうが、16進の羅列をみればコンピューターが何をしようとしているか、だいたいわかってしまうすごい方もいてしまったりします(ちなみに私はなにもわかりません)。
では、10進と16進の違いです。まずは、この表をみて下さい。
10進と16進の対応表 10進 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 .... 255 16進 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 .... FF ・・・となります。
簡単にいうと
10進・・・10で左の桁数が上昇する(みなさんが使い慣れてるほうです)
16進・・・10進でいうところの16で左の桁数が上昇する
こんな感じです。
変換方法
次に変換方法です。これは掛け算と割り算ができれば誰でもできます。まずは10進でいう1から15を16進に直すとどうなるかを完全に頭に叩き込んでください。A(10進でいう10)からF(10進でいう15)までだから全然難しくありません。
10進から16進に変換する場合 16進に変換したい数字(10進)/16=商・・・余り
この時の、商が16進の左のほうの桁(上位と呼ぶ)、余りが16進の右のほうの桁(下位と呼ぶ)になります。
例:10進の126を16進に変換する場合
126/16=7・・・余り14
になるから16進の上位は「7」、下位は「E」(14を16進で表すとE)となるので、
7E、となります。16進を10進にする時はこの逆の事をすればいいだけです。
例:A8を10進に変換したい
10(Aを10進で表すと10)x16+8=168
となり168になります。
この辺は、はっきりいって慣れです。はじめて16進という言葉を聞いた、という方は辛いかもしれませんがバイナリエディタなんかを使っているとなんとなく位にはわかるようになってきます(現に私がそうだから)。
ちなみに16進を表記する時は後ろに「h」(hexadecimalの頭文字)をつけます。ただ10と書くと、10進か16進のことかわかりませんよね。ですから「10h」と書くと10進数でいう「16」ということです。また、あきらかにわかる場合は、省略しても結構です。
単位の事など
最後に、単位なんですが2進(=binary)で表したときの1桁が 1ビット(bit)。普通、操作の最小単位が8ビット(16進=hexadecimalで2桁分)で、1バイト(Byte)。他に2バイトのことをワード(Word)といったり、4ビット(16進で1桁分)のことをニブル(nibble)といったりします。
また、桁位置を指定するために、大きい位(桁の左の方)のことを「上位」逆に小さい位を「下位」と呼びます。例えば、"9E"の上位ニブルは"9"、下位ニブルは"E"となります。
2バイト以上の値を編集するときに注意しなけらばならないことがあって、普通のIntelマシンではリトルエンディアン(little-endian)といって下位のバイトから順にデータが格納されているので、実際には1234hという値が、ファイル上(バイナリエディタでみると)では 34 12 となります。MACとかで使われているモトローラ社製のCPUはbig-endianとかってのを聞いたような・・・
ま、そんなわけで、まとめるとこんな感じです。
[B8A7]という2byteデータは
* 上位 下位 * * 単位 Word byte * nibble * * * bin 1011 1000 0111 1010 hex B 8 7 A で、B8A7hとなりますがlittle-endianのおかげ(せい?)でファイル(バイナリエディタ)でみると「A7 B8」になります。