使い方
- 「変換する数」に数を入れ、「この数の進数」で、その数が2進数(二進数)・8進数・10進数・16進数のどれで書かれているかを選ぶ
- 2進数・8進数・10進数・16進数に直した結果が、その場で4つ同時に表示される。16進数の英字は大文字でも小文字でもよく、0x・0b・0oの接頭辞や、空白・下線の区切りは読み飛ばす
- 文字の変換は、下の「文字を2進数・16進数にするには?」で、バイト列から文字へ戻す変換は「16進数・2進数のバイト列を文字に戻すには?」で行う
- URLに条件を付けて開くと、その条件で最初から表示される(例:
/shinsu/?v=FF&base=16、文字は/shinsu/?text=%E3%81%82、バイト列は/shinsu/?bytes=E3+81+82&bb=16)。各欄の下の「この条件のURLをコピー」でも同じ形のURLを作れる
2進数・8進数・10進数・16進数の対応は?(早見表)
16進数の1桁は2進数の4桁に、8進数の1桁は2進数の3桁に、ちょうど対応します。16進数の1桁で表せる0〜15を2進数の4桁にそろえて並べると、次のとおりです(先頭の0は、4桁にそろえるために付けています)。
| 10進 | 2進 | 8進 | 16進 |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
区切りのよい値の対応は、次のとおりです。10進数の数をタップすると、その数で計算欄が開きます。
| 10進 | 2進 | 8進 | 16進 |
|---|---|---|---|
| 16 | 1 0000 | 20 | 10 |
| 32 | 10 0000 | 40 | 20 |
| 64 | 100 0000 | 100 | 40 |
| 100 | 110 0100 | 144 | 64 |
| 127 | 111 1111 | 177 | 7F |
| 128 | 1000 0000 | 200 | 80 |
| 255 | 1111 1111 | 377 | FF |
| 256 | 1 0000 0000 | 400 | 100 |
| 1,000 | 11 1110 1000 | 1750 | 3E8 |
| 1,024 | 100 0000 0000 | 2000 | 400 |
| 4,095 | 1111 1111 1111 | 7777 | FFF |
| 65,535 | 1111 1111 1111 1111 | 177777 | FFFF |
16進数を10進数に変換するには?
各桁の数に、その桁の重み(位取りの底の累乗)を掛けて、全部足します。16進数なら、右から順に1・16・256…が重みです。
たとえば16進数の1Fは、1 × 16 + 15 × 1 = 31で、10進数の31です(A=10、B=11、C=12、D=13、E=14、F=15として計算します)。2進数の1011も同じ形で、1 × 8 + 0 × 4 + 1 × 2 + 1 × 1 = 11と、10進数の11になります。8進数も、重みが8の累乗になるだけで同じ計算です。
10進数を2進数や16進数にするには?
10進数の数を、変換したい進数の底で割り算して、余りを書き出します。商が0になるまで繰り返し、余りを最後に出たものから順に(下から上へ)並べると答えです。
100を2進数にする手順は次のとおりで、余りを下から読むと1100100です。
- 100 ÷ 2 = 50 余り 0
- 50 ÷ 2 = 25 余り 0
- 25 ÷ 2 = 12 余り 1
- 12 ÷ 2 = 6 余り 0
- 6 ÷ 2 = 3 余り 0
- 3 ÷ 2 = 1 余り 1
- 1 ÷ 2 = 0 余り 1
16進数にするときは、255を16で割ります。255 ÷ 16 = 15 余り 15(F)、15 ÷ 16 = 0 余り 15(F)となり、余りを下から読むとFFです。
2進数と16進数・8進数は、どうやって行き来する?
2進数の桁を、右から4桁ずつ区切ると16進数の1桁に、右から3桁ずつ区切ると8進数の1桁になります。10進数を経由せずに変換できます。
10進数の255の2進数は11111111です。右から4桁ずつ区切ると「1111」「1111」で、それぞれ「F」「F」にあたるので、16進数はFFです。右から3桁ずつ区切ると「11」「111」「111」で、それぞれ「3」「7」「7」にあたるので、8進数は377です。左端が3桁に足りない区切りは、0を補って数えます(「11」は「011」と同じ)。
文字を2進数・16進数にするには?
文字をUTF-8という規格の決まりでバイトの並びに直し、各バイトを16進数(2桁)または2進数(8桁)で書きます。下の欄に文字を入れると、バイト列がその場で表示されます。
文字数・バイト数 3文字・9バイト
- 日 U+65E5 E6 97 A5 11100110 10010111 10100101
- 本 U+672C E6 9C AC 11100110 10011100 10101100
- 語 U+8A9E E8 AA 9E 11101000 10101010 10011110
UTF-8は、文字の番号(コードポイント。U+0041のように書く)の大きさで、使うバイト数を1〜4バイトに分けます。範囲ごとのビットの並びは次のとおりで、x の部分に、文字の番号を2進数で書いたビットを入れます。文字の番号の右端(いちばん下のビット)が、最後のバイトの右端に来ます。
- 1バイト: U+0000〜U+007F(
0xxxxxxx) - 2バイト: U+0080〜U+07FF(
110xxxxx 10xxxxxx) - 3バイト: U+0800〜U+FFFF(
1110xxxx 10xxxxxx 10xxxxxx) - 4バイト: U+10000〜U+10FFFF(
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx)
たとえば「あ」の番号はU+3042で、16進数の3042は2進数で0011000001000010です(xの数にそろえて16桁で書いています)。これを3バイトの型 1110xxxx 10xxxxxx 10xxxxxx のxに、左から順に入れると 11100011 10000001 10000010 になり、16進数で書くとE3 81 82です。U+D800〜U+DFFFは文字として使わない領域で、UTF-8に変換できません。
16進数・2進数のバイト列を文字に戻すには?
バイト列をUTF-8の決まりで文字ごとに区切って、文字の番号に戻します。下の欄に16進数または2進数のバイト列を入れると、文字がその場で表示されます。
文字数・バイト数 3文字・9バイト
- 日 U+65E5 E6 97 A5 11100110 10010111 10100101
- 本 U+672C E6 9C AC 11100110 10011100 10101100
- 語 U+8A9E E8 AA 9E 11101000 10101010 10011110
バイト列は、空白・カンマ・コロン・ハイフン・下線で区切って入れられ、各バイトに0x(16進数)や0b(2進数)を付けてもかまいません。区切りがあるときは、区切られた1つ1つが2桁(16進数)または8桁(2進数)の倍数の桁数でなければエラーにします(「4 1 2 0」を「41 20」とは読みません)。
UTF-8として読めない並びは、別の文字に置き換えず、何バイト目から読めないかをメッセージで知らせます。RFC 3629は、読んではいけない並びの例として、最短でない表し方の C0 80 と、サロゲートの対を表す ED A1 8C ED BE B4 をあげています。
負の数や大きな数はどう扱う?
負の数は、数の大きさに「-」を付けて各進数で書きます。2の補数での表し方には変えません。大きな数は、200桁まで丸めずに全桁を変換します。
10進数の-42は、2進数で-10 1010、8進数で-52、16進数で-2Aです。大きな数の例として、10進数の1,000,000,000,000,000,000,000,000,000,000(10進数の1の後ろに0が30個)は、16進数でC9F2C9CD04674EDEA40000000、2進数で100桁です。
このツールの前提
- 整数だけを変換します。小数・分数は扱っていません
- 入力できる数は200桁まで(先頭の0を除く)です。文字は1,000文字まで、バイト列は4,000バイトまでです
- 負の数は「-」を付けて書きます。2の補数での表し方は扱っていません
- 全角の英数字・記号は半角として読みます。「②」のような互換文字や、全角以外の数字(アラビア・インドの数字など)は、使えない文字としてメッセージを出します
- 文字コードはUTF-8だけです。Shift_JIS・EUC-JP・UTF-16などは扱っていません
- 文字は、入力した文字の並びのまま変換します(「が」を「か」と濁点の2文字で入れれば、2文字として変換します)。先頭のU+FEFFも取り除かず、ふつうの1文字として扱います
- UTF-8として読めないバイト列は、別の文字に置き換えず、エラーにします
本ツールの結果は、入力した値を定義どおりに変換したものです。プログラム・通信・機器に入力する値として使うときは、使う言語や規格の仕様に合った書き方(接頭辞・桁数・文字コードなど)をご自身で確かめてください。
よくある質問
0xFFや0b1010のような書き方は入力できますか?
小数(0.5など)は変換できますか?
負の数の2進数は、2の補数で表示されますか?
何桁の数まで変換できますか?
16進数の英字は、大文字と小文字のどちらで入れますか?
結果の空白やカンマは何ですか?
Shift_JISなど、UTF-8以外の文字コードにも変換できますか?
絵文字は何バイトになりますか?
バイト列を文字に戻すときに、エラーになるのはなぜですか?
出典
UTF-8の定義: F. Yergeau「RFC 3629 UTF-8, a transformation format of ISO 10646」(STD 63、2003年11月)。UTF-8の文字ごとのバイト数とビットの並び(3節)、使わない領域(サロゲート)と不正な並びの例(3節)、バイト列の文法(4節)、先頭のU+FEFFの扱い(6節)、文字の番号の書き方(2節)、日本語・ハングルなどの例(7節)に基づいています。RFC 3629の本文・RFC Editorの案内ページ
進数の変換: 位取り記数法の定義どおりの計算です(BigIntによる整数計算)。
RFC 3629の著作権表示: Copyright (C) The Internet Society (2003). All Rights Reserved.
当サイトは民間のサイトで、IETF・RFC Editorその他の機関が作成・監修したものではありません。バイト列の変換は、RFC 3629の表と文法に基づいて当サイトが実装したものです。