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デバッグや通信プロトコルの理解に役立つ重要な知識である。