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

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

        convertAtoI(String, radix)
        convertItoA(long, radix)

의 구현도 포함되어 있다.


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




실행> groovy makeAsciiTable.groovy

    +----+----+----+----+----+----+----+----+
    | 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
,