コンテンツにスキップ

ASCII

ASCIIとは

ASCII(American Standard Code for Information Interchange)は、文字を数値として表現するための文字コード規格である。

コンピュータは文字を直接理解できないため、

A
B
C

のような文字を数値へ変換して扱う。

ASCIIはその変換ルールを定義した規格である。


なぜ必要なのか

例えば人間は

HELLO

という文字列を読むことができる。

しかしコンピュータは

0
1

しか扱えない。

そのため

H → 72

E → 69

L → 76

L → 76

O → 79

という対応表を利用して文字を数値へ変換する。


ASCII表の例

文字 10進数 16進数
A 65 0x41
B 66 0x42
C 67 0x43
D 68 0x44
a 97 0x61
b 98 0x62
c 99 0x63
0 48 0x30
1 49 0x31
2 50 0x32

ASCIIでの保存例

文字

ABC

はASCIIでは

65
66
67

として保存される。

さらにコンピュータ内部では

01000001
01000010
01000011

として扱われる。


UARTとの関係

UARTでは文字列を送信する際にASCIIコードが利用されることが多い。

例えば

HELLO

を送信すると、

実際には

72
69
76
76
79

が送信される。


STM32での例

char msg[] = "HELLO";

HAL_UART_Transmit(
    &huart1,
    (uint8_t*)msg,
    strlen(msg),
    100
);

人間には

HELLO

と見えるが、

UART上ではASCIIコードとして送信されている。


改行コード

ASCIIには改行などの制御文字も含まれる。

よく利用されるもの

名前 ASCII 16進数
LF 10 0x0A
CR 13 0x0D
TAB 9 0x09
ESC 27 0x1B

LF

Line Feed

\n

として表される。

LinuxやmacOSで一般的。


CR

Carriage Return

\r

として表される。


CR+LF

Windowsでは

\r\n

が改行として利用される。


ASCIIの範囲

ASCIIは7bit規格である。

利用できる範囲

0 ~ 127

である。


ASCIIで表現できない文字

ASCIIでは英数字や記号しか扱えない。

例えば

あ
漢
猫

などの日本語は表現できない。


UTF-8との違い

現在はASCIIよりもUTF-8が広く利用されている。

項目 ASCII UTF-8
英数字
日本語 ×
絵文字 ×
使用範囲 狭い 非常に広い

ASCIIアート

文字だけで図形を表現することをASCIIアートという。

 /\_/\\
( o.o )
 > ^ <

Asterでの利用

AsterではUART通信のデバッグ時にASCIIを利用する可能性が高い。

START
STOP
READY
ERROR

などの文字列を送受信する場合、

内部ではASCIIコードとして通信される。


まとめ

ASCIIは文字を数値として表現するための文字コード規格である。

  • 英数字や記号を数値へ変換する
  • UART通信でよく利用される
  • 7bitで構成される
  • 日本語は扱えない
  • 現在はUTF-8の基礎となっている

組み込み開発ではUARTデバッグや通信プロトコルの理解に役立つ重要な知識である。