Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ASCIIコードの小話

 ASCIIコードの小話

「新しいLinuxの教科書」を読む会 オンライン #12 での発表資料です。
https://linuxbook.connpass.com/event/208181/

Osumi, Yusuke

April 17, 2021
Tweet

More Decks by Osumi, Yusuke

Other Decks in Technology

Transcript

  1. ASCIIコードの小話
    @ozuma5119
    1
    「新しいLinuxの教科書」を読む会 オンライン #12 2021/04/17

    View Slide

  2. 2
    コンピュータの中では、
    すべてが0(ゼロ)と1(イチ)で
    表され……
    本当かなぁ……?
    コマンドだってechoとか
    アルファベットになってるし……

    View Slide

  3. ゼロとイチで見てみよう - xxdコマンド
    $ cat sample.txt
    zshell is great.
    $ xxd -b sample.txt
    0000000: 01111010 01110011 01101000 01100101 01101100 01101100 zshell
    0000006: 00100000 01101001 01110011 00100000 01100111 01110010 is gr
    000000c: 01100101 01100001 01110100 00101110 00001010 eat..
    3
    アドレス データ部 ASCII表示

    View Slide

  4. もうちょっと細かく
    $ cat sample.txt
    zshell is great.
    $ xxd -b sample.txt
    0000000: 01111010 01110011 01101000 01100101 01101100 01101100 zshell
    0000006: 00100000 01101001 01110011 00100000 01100111 01110010 is gr
    000000c: 01100101 01100001 01110100 00101110 00001010 eat..
    4
    01111010 (2進数表現)
    0172 (8進数表現、アタマに0を付ける)
    122 (10進数表現)
    0x7A (16進数表現、アタマに0xを付ける)

    View Slide

  5. 5
    https://en.wikipedia.org/wiki/ASCII

    View Slide

  6. $ man ascii
    6
    Oct 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 A
    002 2 02 STX (start of text) 102 66 42 B
    003 3 03 ETX (end of text) 103 67 43 C
    066 54 36 6 166 118 76 v
    067 55 37 7 167 119 77 w
    070 56 38 8 170 120 78 x
    071 57 39 9 171 121 79 y
    072 58 3A : 172 122 7A z
    .... ....
    8進数
    表現
    10進数
    表現
    16進数
    表現
    ASCII文字
    表現

    View Slide

  7. つまづきやすいポイント
    7
    なんで8進数にしたり16進数に
    したりするの?
    A. 見やすいから。それだけ。
    ぜんぶゼロとイチなら、すべて
    2進数表現でいいのでは?
    A. 長すぎてダルいので16進数で短く書きたい。
      それだけ。

    View Slide

  8. 8
    https://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%AA
    SSD → 電荷記録

    View Slide

  9. 9
    コンピュータの中では、
    すべてが0(ゼロ)と1(イチ)で
    表され……
    本当です

    View Slide

  10. ASCIIコードもうちょっと
    制御コード(コントロールコード)
    10
    Oct 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)

    View Slide

  11. ASCIIコードもうちょっと
    制御コード(コントロールコード)
    11
    Oct Dec Hex Char
    -------------------------------------------
    012 10 0A LF '\n' (new line)
    015 13 0D CR '\r' (carriage ret)
    どちらも改行だが、テレタイプ時代の名残りがある
    LF = ラインフィード。タイプライターの紙を1行送る
    CR = キャリッジリターン。タイプライターのヘッドを先頭に戻す

    View Slide

  12. catで見えない文字を埋め込む
    12
    $ cat ascii.txt
    Hello, World!
    $ xxd ascii.txt
    0000000: 4141 410d 4865 6c6c 6f2c 2057 6f72 6c64 AAA.Hello, World
    0000010: 210a
    編集のしかた:
    vim -b ascii.txt
    :%!xxd
    :%!xxd -r
    キャリッジリターンでカーソルを
    先頭に戻すと、catではそこまでの
    文字が消える

    View Slide

  13. DEL は 0x7F (01111111)
    ASCIIは本来7bitで、テープに穴を開けてビット表現
    失敗した文字は、テープの全部に穴を開けることでDELを
    表現できる
    13
    https://en.wikipedia.org/wiki/Delete_character

    View Slide