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

소스 코드 중에 진법변환에 필요한 함수

        convertAtoI()
        convertItoA()

의 구현도 포함되어 있다.

다음 소스는  C 언어 용으로 만들어 두었던 7비트 ASCII 코드표 만들기 예제 with C and Ch 를 수정한 것이다.

19쩨 줄의 enum { FALSE, TRUE }; 부분은 주석 처리하였는데. Objective-C에서는 TRUE와 FALSE가 이미 정의되어 있기 때문이다.

 

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




컴파일은 Dev-C++ 개발 도구에서 Ctrl+F11 클릭

실행> makeAsciiTable

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



 

Posted by Scripter

댓글을 달아 주세요