「新しいLinuxの教科書」を読む会 オンライン #12 での発表資料です。 https://linuxbook.connpass.com/event/208181/
ASCIIコードの小話@ozuma51191「新しいLinuxの教科書」を読む会 オンライン #12 2021/04/17
View Slide
2コンピュータの中では、すべてが0(ゼロ)と1(イチ)で表され……本当かなぁ……?コマンドだってechoとかアルファベットになってるし……
ゼロとイチで見てみよう - xxdコマンド$ cat sample.txtzshell is great.$ xxd -b sample.txt0000000: 01111010 01110011 01101000 01100101 01101100 01101100 zshell0000006: 00100000 01101001 01110011 00100000 01100111 01110010 is gr000000c: 01100101 01100001 01110100 00101110 00001010 eat..3アドレス データ部 ASCII表示
もうちょっと細かく$ cat sample.txtzshell is great.$ xxd -b sample.txt0000000: 01111010 01110011 01101000 01100101 01101100 01101100 zshell0000006: 00100000 01101001 01110011 00100000 01100111 01110010 is gr000000c: 01100101 01100001 01110100 00101110 00001010 eat..401111010 (2進数表現)0172 (8進数表現、アタマに0を付ける)122 (10進数表現)0x7A (16進数表現、アタマに0xを付ける)
5https://en.wikipedia.org/wiki/ASCII
$ man ascii6Oct Dec Hex Char Oct Dec Hex Char------------------------------------------------------------------------000 0 00 NUL '\0' 100 64 40 @001 1 01 SOH (start of heading) 101 65 41 A002 2 02 STX (start of text) 102 66 42 B003 3 03 ETX (end of text) 103 67 43 C066 54 36 6 166 118 76 v067 55 37 7 167 119 77 w070 56 38 8 170 120 78 x071 57 39 9 171 121 79 y072 58 3A : 172 122 7A z.... ....8進数表現10進数表現16進数表現ASCII文字表現
つまづきやすいポイント7なんで8進数にしたり16進数にしたりするの?A. 見やすいから。それだけ。ぜんぶゼロとイチなら、すべて2進数表現でいいのでは?A. 長すぎてダルいので16進数で短く書きたい。 それだけ。
8https://en.wikipedia.org/wiki/File:Harddrive-engineerguy.ogvハードディスクドライブ→ 磁気記録https://ja.wikipedia.org/wiki/NAND%E5%9E%8B%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%A1%E3%83%A2%E3%83%AASSD → 電荷記録
9コンピュータの中では、すべてが0(ゼロ)と1(イチ)で表され……本当です
ASCIIコードもうちょっと制御コード(コントロールコード)10Oct Dec Hex Char-------------------------------------------010 8 08 BS '\b' (backspace)011 9 09 HT '\t' (horizontal tab)012 10 0A LF '\n' (new line)013 11 0B VT '\v' (vertical tab)014 12 0C FF '\f' (form feed)015 13 0D CR '\r' (carriage ret)
ASCIIコードもうちょっと制御コード(コントロールコード)11Oct Dec Hex Char-------------------------------------------012 10 0A LF '\n' (new line)015 13 0D CR '\r' (carriage ret)どちらも改行だが、テレタイプ時代の名残りがあるLF = ラインフィード。タイプライターの紙を1行送るCR = キャリッジリターン。タイプライターのヘッドを先頭に戻す
catで見えない文字を埋め込む12$ cat ascii.txtHello, World!$ xxd ascii.txt0000000: 4141 410d 4865 6c6c 6f2c 2057 6f72 6c64 AAA.Hello, World0000010: 210a編集のしかた:vim -b ascii.txt:%!xxd:%!xxd -rキャリッジリターンでカーソルを先頭に戻すと、catではそこまでの文字が消える
DEL は 0x7F (01111111)ASCIIは本来7bitで、テープに穴を開けてビット表現失敗した文字は、テープの全部に穴を開けることでDELを表現できる13https://en.wikipedia.org/wiki/Delete_character