TechCraft – エンジニアのためのスキルアップメモ

エンジニアのスキルアップを少しでも加速する技術ブログ

文字コードと数値の世界

文字コードと数値の世界

〜ASCII・Unicodeを“数字”として扱い、理解するための実践入門〜

1. はじめに

「文字は文字、数字は数字」と思っていませんか?
プログラミングの世界では、文字も内部的にはすべて“数値”で扱われています。
この仕組みを理解することは、文字列操作、バイナリ処理、国際化対応、ハッシュ設計など多くの技術に直結します。

この記事では、代表的な文字コード「ASCII」「Unicode」を中心に、文字を数値として扱う基礎と応用Pythonコードとともに解説します。


2. ASCIIとは?― 最小単位の文字コード

✅ ASCII(アスキー)の基本

  • 正式名:American Standard Code for Information Interchange
  • 範囲:0〜127(7ビット)
  • 特徴
    • 英数字と制御文字(改行・タブなど)に限定
    • 半角英数が中心。国際化対応は不可

🔢 ASCIIコードの例

文字 10進数 16進数 2進数
A 65 0x41 0100 0001
a 97 0x61 0110 0001
0 48 0x30 0011 0000
空白 32 0x20 0010 0000

🧪 Pythonで扱う例

# 文字 → 数値(Unicodeコードポイント)
print(ord('A'))  # 65

# 数値 → 文字
print(chr(65))   # 'A'

これだけで、文字を“数字”として自由に扱えるようになります!


3. Unicodeとは?― 世界中の文字をひとまとめに

Unicodeの概要

  • 目的:世界中の文字を統一規格で表現
  • 範囲基本多言語面BMP)は 0〜65535(16ビット以上)
  • 文字セット例

🔤 Unicodeコードポイントの例

文字 コードポイント(10進) 16進 名称
12354 0x3042 ひらがな「あ」
20013 0x4E2D 漢字「中」
😀 128512 0x1F600 顔文字(emoji)

🧪 Pythonでの応用

# Unicode文字を数値に
print(ord('中'))      # 20013
print(hex(ord('中'))) # '0x4e2d'

# 数値から文字に変換
print(chr(0x3042))    # 'あ'

4. 文字コードとバイト列

文字コードの数値(コードポイント)と実際に通信やファイル保存時に使われる“バイト列”は異なります。
たとえば:

# UTF-8でエンコード(バイト列に変換)
print('A'.encode('utf-8'))      # b'A'
print('中'.encode('utf-8'))     # b'\xe4\xb8\xad'

# バイト列からデコード
print(b'\xe4\xb8\xad'.decode('utf-8'))  # '中'

ポイント - ASCII文字は1バイトで済む(互換性が高い) - 非ASCII文字は複数バイト(例:「中」はUTF-8で3バイト)


5. 実践的な応用シーン

✅ 1. 暗号やハッシュでの数値化

text = 'abc'
hash_input = sum(ord(c) for c in text)  # 97 + 98 + 99 = 294
print(hash_input)

✅ 2. ソート時の辞書順制御

print('A' < 'a')  # True(65 < 97)

✅ 3. Base64/Hex変換やバイナリプロトコルの構築

text = 'Hello'
encoded = text.encode('utf-8').hex()
print(encoded)  # 48656c6c6f

6. まとめ

  • ASCII は基本の英数字コード(0〜127)
  • Unicode は世界中の文字に対応(BMPから拡張面まで)
  • 文字は ord()chr() で簡単に数値と相互変換できる
  • UTF-8UTF-16バイト列での表現で、コードポイントと異なる

文字を数値として扱う知識は、暗号処理、データ整形、バイナリ操作などに欠かせません。
“文字”を“データ”として見る視点を持つことで、エンジニアとしての理解が深まります。


📘 おすすめ資料