テキストとコード / ガイド

二進数・十六進数・十進数:数値とテキストの違い

数字の列は数値を表すことも、文章を構成するバイト値を示すこともあります。換算する前に、どちらの意味なのか判断してください。

進数を変えても整数は同じ

10進数の 65、2進数の 1000001、16進数の 41 は、同じ非負整数の3種類の表記です。基数は数の書き方を変えますが、その数が表す値は変えません。10進→2進ツールに 65 を入力し、16進数ツールの結果とも比較しましょう。8ビットの1バイト全体を表示するために先頭のゼロを加えると 01000001 になりますが、表示上の選択で整数の値は変わりません。2進→10進で数値表記を元に戻せます。識別子、ビットマスク、個数など、元データが整数と分かっている場合に適した手順です。

テキストには文字コードが必要

文字 A はテキストの1文字です。UTF-8 では1バイトの 0x41 で表し、そのビットパターンは 01000001 です。UTF-8 の ASCII 文字はそのバイト値を使うため、ここでは上の整数の例と偶然一致します。しかし文字列「65」には 6 と 5 の2文字があり、UTF-8 バイト列は 0x36 と 0x35 です。したがって、数値 65 を数値変換ツールに入れる場合と、文字列「65」をテキスト→バイトのツールに入れる場合では答える質問が違います。元データが数値か、そのまま入力された文字かを確認してください。

整数 65、文字 A、テキスト「65」は異なるデータです。
  1. 整数 65₁₀ = 41₁₆ = 1000001₂
  2. 文字 A → UTF-8 バイト 41₁₆
  3. テキスト「65」→ UTF-8 バイト 36 35₁₆

アクセント付き文字で違いを見る

文字 é は UTF-8 で C3 A9 という2バイトで表されます。Unicode コードポイントは U+00E9 ですが、正規化形式が違えば e の後に結合アクセントを置いて表すこともできます。テキスト→2進数ツールは、目に見える1文字に対して1組ではなく、合成形の UTF-8 で8ビットの組を2つ表示する場合があります。文字のコードポイントを1バイトだと思い込むと、情報が失われたり誤った出力になったりします。テキストプロトコルの不具合を調べる際は、整数用の10進→16進ツールではなく、UTF-8 のバイト表示を使ってください。

データの境界と区切りを確認する

2進数の文字列 0100000101000010 は、01000001 と 01000010 の2バイトとして読むと、UTF-8 では AB になります。文字コードと区切り規則が分からなければ、裸のビット列の解釈は曖昧です。10進数の 4142 は16進数の 4142 と同じ値ではなく、どちらも自動的に2バイトのテキストを意味するわけではありません。16進数の接頭語 0x や、バイト間の明示的な空白があれば記録を読みやすくできます。貼り付けたデータをデコードする前に元の区切りを保ち、その形式で先頭のゼロに意味があるか確認してください。

目的に合う検算を選ぶ

数値を変換するときは、元の整数とその基数を記録し、変換後に対応する逆方向の数値ツールで元へ戻して確かめます。テキストでは、文字と必要ならその正規化形式、UTF-8 のバイト列を記録し、対応するテキストツールでバイト列を復号してください。A、65、é を別々のテスト入力として試します。コピーした出力が予想外に長ければ、バイト数を数え、入力に空白、改行、ASCII 以外の文字が含まれていないか調べます。二つの手順は同じバイト値に至る場合がありますが、その値をどう解釈するかは元データの仕様で決まります。

変換ツールを試す

整数 65 を二進数に換算し、文字を UTF-8 に符号化する操作と比べます。

十進整数を、桁数の制限なく2進数の数字列に変換します。

変換ツールを開く

その他のガイド

変換ガイド

ガイドを探す