1. FF -> 255
  2. 0 -> 0
  3. 1A3 -> 419
  4. ff -> 255 (lowercase)
  5. 100 -> 256
  6. ABCDEF -> 11259375
  7. 10 -> 16
コース一覧
コンピューターサイエンス入門:理論編
16 進数から 10 進数への変換

コンピューターサイエンス入門:理論編

2 進数、論理演算、ビット演算、データ構造、計算量、メモリモデルなど、プログラミングの土台となるコンピュータサイエンスの理論知識を学べるコースです。プログラミングを始めたばかりの学習者や、CS の体系的な土台を作りたい現役エンジニアを対象としています。約 13 時間 (1 日 30 分 × 26 日) で 53 レッスンを修了でき、修了後はコードのパフォーマンスや設計判断の根拠を理解した上で実装できるようになります。

1
2進数とビット演算
01. 2進数から10進数への変換5分
02. 10進数から2進数への変換5分
03. ビットAND演算でフラグ判定5分
04. OR / XOR でフラグを操作する5分
05. popcount で 1 のビット数を数える5分
06. シフト演算で 2 倍 / 半分5分
07. 16 進数から 10 進数への変換5分
08. 第 1 章まとめクイズ5分
2
文字コードと真偽値ロジック
01. 文字 → ASCII コード5分
02. コード → 文字5分
03. UTF-8 のバイト長を返す5分
04. AND / OR の真理値表5分
05. NOT / XOR の真理値表5分
06. 含意 (→) を AND/OR/NOT で表現5分
07. ド・モルガンの法則5分
08. 第2章まとめクイズ5分
3
計算量とBig-O
01. forループの実行回数を返す5分
02. 入れ子ループの実行回数5分
03. 線形探索 (O(n))5分
04. 二分探索 (O(log n))5分
05. バブルソート5分
06. 配列の最大と最小5分
07. 累積和で範囲合計5分
08. 第3章まとめクイズ5分
4
データ構造 (基本)
01. スタック (push/pop) を実装する5分
02. キュー (enqueue / dequeue) を実装する5分
03. カッコのバランス判定 (スタック応用)5分
04. set で重複を除去する5分
05. map で出現回数を数える5分
06. 二数の和 (map で O(n))5分
07. アナグラム判定5分
08. 第 4 章クイズ — データ構造 (基本)5分
5
ファイル / メモリ / IO 概念
01. バイト → KB 変換5分
02. ディスクサイズフォーマット5分
03. キャッシュヒット率5分
04. LRU 簡易シミュレーション5分
05. エンディアンの入れ替え (uint32)5分
06. バッファ範囲チェック5分
07. 第5章まとめクイズ5分
6
ネットワークと符号化
01. Base64 エンコード後の長さ計算5分
02. URL エンコード対象文字数5分
03. IPv4 アドレスを 32bit 整数に変換5分
04. 32bit 整数を IPv4 アドレスに変換5分
05. CIDR プレフィックスからネットマスクを作る5分
06. 単純チェックサム5分
07. 第6章まとめクイズ5分
7
設計と DB 基礎
01. 重複データを 1NF に変換 (フラットなリスト化)5分
02. キーで join (map 利用)5分
03. 残高転送のトランザクション風処理5分
04. CAP の availability 模擬5分
05. URL ルーティング5分
06. 疎結合と密結合 — 依存性注入で設計を変える12分
07. コース総まとめクイズ5分

16 進数から 10 進数への変換

2 進数 24 桁は、目で追えない

111111110110011000000000 を渡されて、どこまでが何なのか読める人はいません。桁が長すぎて、数えている途中で位置を見失います。

ところが 4 桁ずつ区切ると、様子が変わります。

プレーンテキスト

1111 1111 0110 0110 0000 0000 F F 6 6 0 0

#FF6600 になりました。CSS で見かけるあの記法です。16 進数は、2 進数を 4 桁ずつまとめて 1 文字に置き換えたものにすぎません。

4 桁で 16 通りだから、1 文字に収まる

2 進数 4 桁で表せるのは 0000 から 1111 までの 16 通りです。16 進数はちょうど 16 種類の文字を使うので、4 桁と 1 文字が一対一で対応します。数字は 10 種類しかないので、足りない 6 つを A から F が引き受けて 10 から 15 を担当します。

区切りがずれないのも大きな利点です。1 バイトは 8 桁なので必ず 2 文字、4 バイトなら 8 文字です。メモリの中身やパケットを 16 進で並べると、バイトの境目が文字の位置にそのまま出るので、目で数えられます。

重みは 16 倍ずつ増える

10 進数に直すときは、また桁の重みを使います。ここも考え方は変わらず、右端から 1、16、256 と 16 倍ずつ増えていきます。2 進数を 4 桁まとめたのだから、重みも 2 の 4 乗ずつ増える、と考えても同じです。

1A3 なら次のようになります。

プレーンテキスト

1 * 256 = 256 A * 16 = 160 A は 10 として計算する 3 * 1 = 3 合計 419

文字の A は、数の 10 ではない

ここが実装でいちばん詰まるところです。受け取るのは文字列なので、A は A という文字でしかありません。数の 10 として計算に混ぜるには、文字ごとに置き換える手当てが要ります。

そして同じことが数字にも起きます。文字の 7 も、数の 7 ではありません。文字のまま足すと、多くの言語で数にならず、つながった文字列が返ってきます。0 から 9 の側にも置き換えが要る、と気づけるかどうかで詰まる時間が変わります。

もう 1 つの落とし穴が大文字と小文字です。ff も FF も Ff も、同じ 255 を指します。片方だけを見て分岐すると、もう片方が黙って落ちます。どちらかに寄せてから処理するのが安全です。

要件

  1. 0-9、A-F、a-f のみからなる文字列と仮定して良い (0x プレフィックスはない)
  2. 組み込みの基数変換 (int(s, 16) / parseInt(s, 16) / Integer.parseInt(s, 16)) は使わない
  3. 大文字小文字どちらも処理できること

入出力例

hexToDec("FF") → 255 hexToDec("0") → 0 hexToDec("1A3") → 419 hexToDec("ff") → 255 hexToDec("100") → 256 hexToDec("ABCDEF") → 11259375 hexToDec("10") → 16

ヒント

result = 0 から始めて、各文字について result = result * 16 + 桁の値 を繰り返す (ホーナー法)

0-9 は ord(ch) - ord('0')、A-F は ord(ch) - ord('A') + 10 で数値化

大文字小文字を統一するため、最初に upper() / toUpperCase() しておくと楽

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • 第 1 章まとめクイズ

    2 進数とビット演算の理解度を確認するまとめクイズ。

  • 文字 → ASCII コード

    1 文字を受け取り、その ASCII コード (整数) を返す関数を実装します。ord() 系の組み込みでバイト値の世界に触れます。

  • forループの実行回数を返す

    for ループを n 回まわすときに、本当に n 回実行されているのかを自分の手で数え、計算量の感覚を掴む。

  • スタック (push/pop) を実装する

    後入れ先出し (LIFO) の代表選手であるスタックを、push と pop の操作シーケンスで動かす。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • CSSCascading Style Sheetsの略。
  • メモリプログラムとデータを一時保持する高速領域
  • 処理計算や代入を表す長方形
  • Integer.parseInt文字列を int に変換するメソッド
main.py
学習モード
エディタを読み込んでいます

メモ

16 進数から 10 進数への変換

⌘S で保存