コード講座その1

Revised : 2020/07/25
Since : 2005/06/26


Home   | コード(その2) ∥ Base64 | radix64 | ASCIIコード

Base64

電子メールでは英数字と一部の記号しか送れない。なぜか?それはそれ以外不要だったからだ。
もともと英文の手紙を電子的に送るために作られ、英数字と一部の記号があれば十分だった。
ASCIIコード表を見れば分かるとおり、コードは7ビットで、電子メール等の制御も7ビットで行われる。
(8ビットに拡張されてるものもあるが・・・詳しくはRFC(Request For Comments)を・・・)
では日本語で送ったり写真を添付したり出来るのはなぜか?
それは送信する際に、英数字等に変換してるからだ。その変換方法の1つにBase64がある。
Base64変換するとファイルサイズは4/3倍に大きくなる。

簡単な説明
普通のパソコンは1バイト=8ビットである(オクテットとも言う)。
Base64は7ビット以内に収めるため、8ビット(0 - 255)×3単位ではなく6ビット(0 - 63)×4単位で扱っている。
64種類の文字には A-Z , a-z , 0-9 と + と / が穴埋め(パディング)には = が用いられる。
URL用に + / の代わりに - _ を用い穴埋めはしない等いくつかの変形版がある。

入力 1バイト目 2バイト目 3バイト目
8bit xxxxxxxx yyyyyyyy zzzzzzzz
6bit xxxxxx xx yyyy yyyyzz zzzzzz
出力 1文字目 2文字目 3文字目 4文字目

6bit 対応文字
0 - 25 A - Z 大文字
26 - 51 a - z 小文字
52 - 61 0 - 9 数字
62 , 63 + , / 記号
pad = 穴埋め

入力データを3バイト毎に区切ると、一番最後は2バイト目3バイト目がない場合がある。
このバイトを0で穴埋めをすることにより、3バイトとする。
この場合、出力文字の4文字目もしくは3文字目と4文字目が0になる。
この0は穴埋めの0なので = を出力する。つまり穴埋めしたバイト数だけ = を出力するのである。

通常、1 行を 76 文字未満に保つため、復帰改行文字 (CRLF) が挿入される。

ページの上部へ

Radix64

Radix64はBase64にチェックサムを付加したものである。

チェックサムは、24bitのCRCをBase64変換と同じ方法で4つのキャラクタに変換したもので、イコールサイン(=)が前につく。
CRCは、0x864CFB生成と0xB704CE初期値を使って計算される。

データのチェックサムは、Radix64に変換されたデータ上ではなく、変換される前のデータ上で行われる。
24ビットというサイズはBase64に適合する。
CRCをゼロ以外の値で初期化をすると、ゼロ値の初期化より多くのエラーを検出する。

例としてこのようになる。

-----BEGIN MESSAGE-----
aHR0cDovL2NoaWNoaXVlLmhhaGF1ZS5jb20vDQpodHRwOi8vY2hpY2hpaGFoYS5ibG9nLnNoaW5v
YmkuanAvDQo=
=gO/e
-----END MESSAGE-----

ページの上部へ

ASCIIコード

ASCIIコード表

文字 コード
10進 16進
NUL 0 0x00
SOH 1 0x01
STX 2 0x02
ETX 3 0x03
EOT 4 0x04
ENQ 5 0x05
ACK 6 0x06
BEL 7 0x07
BS 8 0x08
HT 9 0x09
LF 10 0x0a
VT 11 0x0b
FF 12 0x0c
CR 13 0x0d
SO 14 0x0e
SI 15 0x0f
文字 コード
10進 16進
DLE 16 0x10
DC1 17 0x11
DC2 18 0x12
DC3 19 0x13
DC4 20 0x14
NAK 21 0x15
SYN 22 0x16
ETB 23 0x17
CAN 24 0x18
EM 25 0x19
SUB 26 0x1a
ESC 27 0x1b
FS 28 0x1c
GS 29 0x1d
RS 30 0x1e
US 31 0x1f
文字 コード
10進 16進
SP 32 0x20
! 33 0x21
" 34 0x22
# 35 0x23
$ 36 0x24
% 37 0x25
& 38 0x26
' 39 0x27
( 40 0x28
) 41 0x29
* 42 0x2a
+ 43 0x2b
, 44 0x2c
- 45 0x2d
. 46 0x2e
/ 47 0x2f
文字 コード
10進 16進
0 48 0x30
1 49 0x31
2 50 0x32
3 51 0x33
4 52 0x34
5 53 0x35
6 54 0x36
7 55 0x37
8 56 0x38
9 57 0x39
: 58 0x3a
; 59 0x3b
< 60 0x3c
= 61 0x3d
> 62 0x3e
? 63 0x3f
文字 コード
10進 16進
@ 64 0x40
A 65 0x41
B 66 0x42
C 67 0x43
D 68 0x44
E 69 0x45
F 70 0x46
G 71 0x47
H 72 0x48
I 73 0x49
J 74 0x4a
K 75 0x4b
L 76 0x4c
M 77 0x4d
N 78 0x4e
O 79 0x4f
文字 コード
10進 16進
P 80 0x50
Q 81 0x51
R 82 0x52
S 83 0x53
T 84 0x54
U 85 0x55
V 86 0x56
W 87 0x57
X 88 0x58
Y 89 0x59
Z 90 0x5a
[ 91 0x5b
\ 92 0x5c
] 93 0x5d
^ 94 0x5e
_ 95 0x5f
文字 コード
10進 16進
` 96 0x60
a 97 0x61
b 98 0x62
c 99 0x63
d 100 0x64
e 101 0x65
f 102 0x66
g 103 0x67
h 104 0x68
i 105 0x69
j 106 0x6a
k 107 0x6b
l 108 0x6c
m 109 0x6d
n 110 0x6e
o 111 0x6f
文字 コード
10進 16進
p 112 0x70
q 113 0x71
r 114 0x72
s 115 0x73
t 116 0x74
u 117 0x75
v 118 0x76
w 119 0x77
x 120 0x78
y 121 0x79
z 122 0x7a
{ 123 0x7b
| 124 0x7c
} 125 0x7d
~ 126 0x7e
DEL 127 0x7f

ISO 646で割り当ての
変更が認められている文字

コード 文字
0x23 # (シャープ)
0x24 $ (ドル)
0x40 @ (アットマーク)
0x5b [ (大括弧開き)
0x5c* \ (バックスラッシュ)
0x5d ] (大括弧閉じ)
0x5e ^ (ハット)
0x60 ` (バッククォート)
0x7b { (中括弧開き)
0x7c | (縦棒)
0x7d } (中括弧閉じ)
0x7e ~ (チルダ)

注)
0x5cは本来”\”(バックスラッシュ)だが
日本では”¥”(円記号)に変更されている
文字コードの種類にも依るが・・・)

制御文字

10進法 16進法 文字 説       明
0 0x00 NUL ヌル(空文字) null
1 0x01 SOH ヘディング開始 start of heading
2 0x02 STX テキスト開始 start of text
3 0x03 ETX テキスト終了 end of text
4 0x04 EOT 伝送終了 end of transmission
5 0x05 ENQ 問い合わせ enquiry
6 0x06 ACK 肯定応答 acknowledgement
7 0x07 BEL ベル bell
8 0x08 BS バックスペース backspace
9 0x09 HT 水平タブ character tabulation
10 0x0a LF 改行 NL(New Line) line feed
11 0x0b VT 垂直タブ line tabulation
12 0x0c FF 改ページ NP(New Page) form feed
13 0x0d CR 行頭復帰 carriage return
14 0x0e SO シフトアウト shift-out
15 0x0f SI シフトイン shift-in
16 0x10 DLE 伝送制御拡張 data link escape
17 0x11 DC1 デバイス制御1:XONとして使用されることが多い device control one
18 0x12 DC2 デバイス制御 device control two
19 0x13 DC3 デバイス制御3:XOFFとして使用されることが多い device control three
20 0x14 DC4 デバイス制御4 device control four
21 0x15 NAK 否定応答 negative acknowledgement
22 0x16 SYN 同期信号 synchronous idle
23 0x17 ETB ブロック転送終了 end of transmission block
24 0x18 CAN キャンセル cancel
25 0x19 EM メディアの終端 end of medium
26 0x1a SUB 置換 substitute
27 0x1b ESC エスケープ escape
28 0x1c FS ファイルセパレータ file separator
29 0x1d GS グループセパレータ group separator
30 0x1e RS レコードセパレータ recode separator
31 0x1f US ユニットセパレータ unit separator
32 0x20 SP スペース space
127 0x7f DEL 削除 delete
ページの上部へ
104種類もの面白くて可愛いドメインがたくさん!ロリポップ!レンタルサーバー★