ASCII(애스키)란 American Standard Code for Information Interchange의 줄임글로서, 영문자에 기초한 문자 인코딩이다.  이 문자 인코딩에는 C0 제어문자(C0 control character)도 포함되어 있다.  ( 참고:  ASCII - Wikipedia, the free encyclopedia )

다음은  7bit ASCII 코드표를 만들어 보여주는 자바 소스 코드이다. 소스 코드 중에 진법변환에 필요한 함수

        convertAtoI(string, radix)
        convertItoA(number, radix)

의 구현도 포함되어 있다.



  1. --  Filename: makeAsciiTable.lua
  2. --            Make a table of ascii codes.
  3. --
  4. --  Execute: lua makeAsciiTable.lua
  5. --
  6. --      Date:  2008/03/28
  7. --    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  8. local BASE36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  9. function println(s)
  10.     print(s)
  11. end
  12. function printUsage()
  13.     println("Usage: lua makeAsciiTable.lua")
  14.     println("Make a table of ascii codes.")
  15. end
  16. function convertItoA(num, radix)
  17.     local isNegative = false
  18.     if num < 0 then
  19.         isNegative = true
  20.         num = -num
  21.     end
  22.     local arr = ""
  23.     local q = num
  24.     local r = 0
  25.     while q >= radix do
  26.         r = math.fmod(q, radix)
  27.         q = math.floor(q / radix)
  28.         arr = arr .. string.sub(BASE36, r+1, r+1)
  29.     end
  30.     arr = arr .. string.sub(BASE36, q+1, q+1)
  31.     if isNegative then
  32.         arr = arr .. "-"
  33.     end
  34.     local n = string.len(arr)
  35.     local ret = ""
  36.     for i = 1, n do
  37.         ret = ret .. string.sub(arr, n - i + 1, n - i + 1)
  38.     end
  39.     return ret
  40. end
  41. function convertAtoI(srcStr, radix)
  42.     local isNegative = false
  43.     local ret = 0
  44.     local len = string.len(srcStr)
  45.     local val = 0
  46.     local c
  47.     c = string.sub(srcStr, 1, 1)
  48.     if c == '-' then
  49.         isNegative = true
  50.     elseif c >= '0' and c <= '9' then
  51.         ret = string.byte(c) - string.byte('0')
  52.     elseif c >= 'A' and c <= 'Z' then
  53.         ret = string.byte(c) - string.byte('A') + 10
  54.     elseif c >= 'a' and c <= 'z' then
  55.         ret = string.byte(c) - string.byte('a') + 10
  56.     end
  57.     if ret >= radix then
  58.         println("        Invalid character!")
  59.         return ret
  60.     end
  61.     for i = 2, len do
  62.         c = string.sub(srcStr, i, i)
  63.         ret = ret * radix
  64.         if c >= '0' and c <= '9' then
  65.             val = string.byte(c) - string.byte('0')
  66.         elseif c >= 'A' and c <= 'Z' then
  67.             val = string.byte(c) - string.byte('A') + 10
  68.         elseif c >= 'a' and c <= 'z' then
  69.             val = string.byte(c) - string.byte('a') + 10
  70.         end
  71.         if val >= radix then
  72.             println("        Invalid character!")
  73.             return ret
  74.         end
  75.         ret = ret + val
  76.     end
  77.     return ret
  78. end
  79. function makeTable()
  80.   asc = {
  81.     "NUL", "SOH", "STX", "ETX", "EOT",
  82.     "ENQ", "ACK", "BEL", "BS", "HT",
  83.     "LF", "VT", "FF", "CR", "SO",
  84.     "SI", "DLE", "DC1", "DC2", "DC3",
  85.     "DC4", "NAK", "SYN", "ETB", "CAN",
  86.     "EM", "SUB", "ESC", "FS", "GS",
  87.     "RS", "US", "Spc"
  88.   }
  89.   control = {
  90.     "NUL (null)",
  91.     "SOH (start of heading)",
  92.     "STX (start of text)",
  93.     "ETX (end of text)",
  94.     "EOT (end of transmission)",
  95.     "ENQ (enquiry)",
  96.     "ACK (acknowledge)",
  97.     "BEL (bell)",
  98.     "BS  (backspace)",
  99.     "TAB (horizontal tab)",
  100.     "LF  (line feed, NL new line)",
  101.     "VT  (vertical tab)",
  102.     "FF  (form feed, NP new page)",
  103.     "CR  (carriage return)",
  104.     "SO  (shift out)",
  105.     "SI  (shift in)",
  106.     "DLE (data link escape)",
  107.     "DC1 (device control 1)",
  108.     "DC2 (device control 2)",
  109.     "DC3 (device control 3)",
  110.     "DC4 (device control 4)",
  111.     "NAK (negative acknowledge)",
  112.     "SYN (synchronous idle)",
  113.     "ETB (end of trans. block)",
  114.     "CAN (cancel)",
  115.     "EM  (end of medium)",
  116.     "SUB (substitute, EOF end of file)",
  117.     "ESC (escape)",
  118.     "FS  (file separator)",
  119.     "GS  (group separator)",
  120.     "RS  (record separator)",
  121.     "US  (unit separator)",
  122.   }
  123.     local sbuf = ""
  124.     local abuf = ""
  125.     local tbuf = ""
  126.     local i, j
  127.     sbuf = "    "
  128.     for i = 1, 8 do
  129.         sbuf = sbuf .. "+----"
  130.     end
  131.     sbuf = sbuf .. "+"
  132.     println(sbuf)
  133.     sbuf = "    "
  134.     sbuf = sbuf .. "| 0- "
  135.     sbuf = sbuf .. "| 1- "
  136.     sbuf = sbuf .. "| 2- "
  137.     sbuf = sbuf .. "| 3- "
  138.     sbuf = sbuf .. "| 4- "
  139.     sbuf = sbuf .. "| 5- "
  140.     sbuf = sbuf .. "| 6- "
  141.     sbuf = sbuf .. "| 7- "
  142.     sbuf = sbuf .. "|"
  143.     println(sbuf)
  144.     sbuf = "+---"
  145.     for i = 1, 8 do
  146.         sbuf = sbuf .. "+----"
  147.     end
  148.     sbuf = sbuf .. "+"
  149.     println(sbuf)
  150.     for i = 0, 15 do
  151.         tbuf = ""
  152.         sbuf = convertItoA(i, 16)
  153.         tbuf = tbuf .. "| " .. sbuf .. " "
  154.         for j = 0, 7 do
  155.             if j*16 + i <= 32 then
  156.                 abuf = string.format("| %-3s", asc[j*16 + i + 1])
  157.             elseif j*16 + i == 127 then
  158.                 abuf = string.format("| %-3s", "DEL")
  159.             else
  160.                 c = j*16 + i
  161.                 abuf = string.format("| %2c ", c)
  162.             end
  163.             tbuf = tbuf .. abuf
  164.         end
  165.         tbuf = tbuf .. "|"
  166.         println(tbuf)
  167.     end
  168.     sbuf = "+---"
  169.     for i = 1, 8 do
  170.         sbuf = sbuf .. "+----"
  171.     end
  172.     sbuf = sbuf .. "+"
  173.     println(sbuf)
  174.     println("")
  175.     for i = 1, 16 do
  176.         tbuf = string.format("%-30s  %-34s", control[i], control[i+16])
  177.         println(tbuf)
  178.     end
  179. end
  180. if #arg > 0 and "-h" == arg[1] then
  181.     printUsage()
  182.     os.exit(1)
  183. end
  184. makeTable()




실행> lua makeAsciiTable.lua

    +----+----+----+----+----+----+----+----+
    | 0- | 1- | 2- | 3- | 4- | 5- | 6- | 7- |
+---+----+----+----+----+----+----+----+----+
| 0 | NUL| DLE| Spc|  0 |  @ |  P |  ` |  p |
| 1 | SOH| DC1|  ! |  1 |  A |  Q |  a |  q |
| 2 | STX| DC2|  " |  2 |  B |  R |  b |  r |
| 3 | ETX| DC3|  # |  3 |  C |  S |  c |  s |
| 4 | EOT| DC4|  $ |  4 |  D |  T |  d |  t |
| 5 | ENQ| NAK|  % |  5 |  E |  U |  e |  u |
| 6 | ACK| SYN|  & |  6 |  F |  V |  f |  v |
| 7 | BEL| ETB|  ' |  7 |  G |  W |  g |  w |
| 8 | BS | CAN|  ( |  8 |  H |  X |  h |  x |
| 9 | HT | EM |  ) |  9 |  I |  Y |  i |  y |
| A | LF | SUB|  * |  : |  J |  Z |  j |  z |
| B | VT | ESC|  + |  ; |  K |  [ |  k |  { |
| C | FF | FS |  , |  < |  L |  \ |  l |  | |
| D | CR | GS |  - |  = |  M |  ] |  m |  } |
| E | SO | RS |  . |  > |  N |  ^ |  n |  ~ |
| F | SI | US |  / |  ? |  O |  _ |  o | DEL|
+---+----+----+----+----+----+----+----+----+

NUL (null)                      DLE (data link escape)
SOH (start of heading)          DC1 (device control 1)
STX (start of text)             DC2 (device control 2)
ETX (end of text)               DC3 (device control 3)
EOT (end of transmission)       DC4 (device control 4)
ENQ (enquiry)                   NAK (negative acknowledge)
ACK (acknowledge)               SYN (synchronous idle)
BEL (bell)                      ETB (end of trans. block)
BS  (backspace)                 CAN (cancel)
TAB (horizontal tab)            EM  (end of medium)
LF  (line feed, NL new line)    SUB (substitute, EOF end of file)
VT  (vertical tab)              ESC (escape)
FF  (form feed, NP new page)    FS  (file separator)
CR  (carriage return)           GS  (group separator)
SO  (shift out)                 RS  (record separator)
SI  (shift in)                  US  (unit separator)



Creative Commons License

이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Posted by Scripter
,