ASCII

1. ASCIIコードとは?

1.1 基本概念

 ASCIIコード(アスキーコード)は、コンピュータが文字を扱うための最も基本的な「約束事」です。例えば、私たちが「A」という文字を入力すると、コンピュータ内部では「65」(16進数では41)という数値として処理されます。これは、ちょうど暗号表のように、「文字」と「数値」を対応させる仕組みです。

1.2 なぜASCIIコードが必要なのか?

 コンピュータは内部ではすべてを2進数(0と1)で処理します。例えば:

  • キーボードで「A」を入力 → コンピュータは「65」(01000001)として認識
  • プログラムで処理 → 画面に「A」として表示

 この「翻訳表」としてのASCIIコードがなければ、文字の取り扱いが統一されず、コンピュータ間での文字のやり取りができません。

2. ASCIIコードの構造

2.1 基本構成

  • 7ビットで表現(0-127までの数値)
  • 大きく3つのグループに分類:
  1. 制御文字(0-31):目に見えない特殊な命令
  2. 印字可能文字(32-126):画面に表示できる文字
  3. 削除文字(127):特殊な制御文字

2.2 重要な規則性

大文字のA (65, 0x41)
小文字のa (97, 0x61)
320x20の差がある

 これは1例ですが、このような規則性を覚えておくと、プログラミングで役立ちます。

3. 実践的な活用例

3.1 文字の大文字・小文字変換

# Pythonでの例
def to_upper(char):
    ascii_code = ord(char)  # 文字をASCIIコードに変換
    if 97 <= ascii_code <= 122:  # 小文字の範囲
        return chr(ascii_code - 32)  # 32を引いて大文字に
    return char

print(to_upper('a'))  # 出力: A

3.2 文字列の入力チェック

// JavaScriptでの例
function isAlphanumeric(str) {
    return str.split('').every(char => {
        let code = char.charCodeAt(0);
        return (
            (48 <= code && code <= 57) ||  // 数字
            (65 <= code && code <= 90) ||  // 大文字
            (97 <= code && code <= 122)    // 小文字
        );
    });
}

3.3 よく使う制御文字

  • 改行文字(LF: 10, CR: 13)
  # Windowsとの互換性を考慮した改行
  text = "Hello\r\nWorld"  # \r\n = CR+LF
  • 空白文字(Space: 32, Tab: 9)
  # インデントの処理
  indent = "\t"  # タブ文字(ASCII: 9

4. 実務でよく遭遇する場面

4.1 文字化けのデバッグ

# 文字列の内容を16進数で確認
def debug_string(text):
    return ' '.join(hex(ord(c))[2:] for c in text)

print(debug_string("Hello"))  # 48 65 6c 6c 6f

4.2 ファイル処理での注意点

  • テキストファイルの改行コード
  • バイナリファイルの先頭への制御文字の混入
  • CSVファイルでの区切り文字の扱い

コード表例

 コード表例ではHEX表示を横軸が上位、縦軸が下位となります。HEXの41は横軸0x4_で縦軸_x1となり’A’を指しています。同様に5Aであれば’Z’を、3Fであれば’?’を指します。

ASCII コードマトリックス表

横軸は上位3ビット(0-7)、縦軸は下位4ビット(0-15)を表します。
各セルには文字とそのコードが表示されています。
000
0x0_
001
0x1_
010
0x2_
011
0x3_
100
0x4_
101
0x5_
110
0x6_
111
0x7_
0000
_x0
NUL
00
DLE
10
SP
20
0
30
@
40
P
50
`
60
p
70
0001
_x1
SOH
01
DC1
11
!
21
1
31
A
41
Q
51
a
61
q
71
0010
_x2
STX
02
DC2
12

22
2
32
B
42
R
52
b
62
r
72
0011
_x3
ETX
03
DC3
13
#
23
3
33
C
43
S
53
c
63
s
73
0100
_x4
EOT
04
DC4
14
$
24
4
34
D
44
T
54
d
64
t
74
0101
_x5
ENQ
05
NAK
15
%
25
5
35
E
45
U
55
e
65
u
75
0110
_x6
ACK
06
SYN
16
&
26
6
36
F
46
V
56
f
66
v
76
0111
_x7
BEL
07
ETB
17

27
7
37
G
47
W
57
g
67
w
77
1000
_x8
BS
08
CAN
18
(
28
8
38
H
48
X
58
h
68
x
78
1001
_x9
HT
09
EM
19
)
29
9
39
I
49
Y
59
i
69
y
79
1010
_xA
LF
0A
SUB
1A
*
2A
:
3A
J
4A
Z
5A
j
6A
z
7A
1011
_xB
VT
0B
ESC
1B
+
2B
;
3B
K
4B
[
5B
k
6B
{
7B
1100
_xC
FF
0C
FS
1C
,
2C
<
3C
L
4C
\
5C
l
6C
|
7C
1101
_xD
CR
0D
GS
1D

2D
=
3D
M
4D
]
5D
m
6D
}
7D
1110
_xE
SO
0E
RS
1E
.
2E
>
3E
N
4E
^
5E
n
6E
~
7E
1111
_xF
SI
0F
US
1F
/
2F
?
3F
O
4F
_
5F
o
6F
DEL
7F

凡例:

  • 淡いオレンジ色のセル – 制御文字
  • 白色のセル – 印字可能文字
  • 各セルの下の数字は16進数表記

参照