컴퓨터 프로그래밍에서 꼭 알아두어야 할 주요 진법은 당연히 10진법, 2진법, 8진법, 16진법이다.
다음은  0 에서 15 까지의 정수를 10진법, 2진법, 8진법, 16진법의 표로 만들어 보여주는 Lua 소스 코드이다. 진법 변환에 필요한 함수

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

를 Lua 코드로 자체 작성하여 사용하였다.



  1. --  Filename: makeRadixTable.lua
  2. --            Show the radix table with 10-, 2-, 8-, 16-radices.
  3. --
  4. --  Execute: lua makeRadixTable.lua
  5. --
  6. --      Date:  2008/03/28
  7. --    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  8. BASE36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  9. function println(s)
  10.     print(s)
  11. end
  12. function printUsage()
  13.     println("Usage: lua makeRadixTable.lua")
  14.     println("Show the radix table with 10-, 2-, 8-, 16-radices.")
  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.     sbuf = ""
  81.     abuf = ""
  82.     tbuf = ""
  83.     for i = 1, 4 do
  84.         sbuf = sbuf .. "+-------"
  85.     end
  86.     sbuf = sbuf .. "+"
  87.     println(sbuf)
  88.     sbuf = "|  Dec"
  89.     sbuf = sbuf .. "\t|   Bin"
  90.     sbuf = sbuf .. "\t|  Oct"
  91.     sbuf = sbuf .. "\t|  Hex  |"
  92.     println(sbuf)
  93.     sbuf = ""
  94.     for i = 1, 4 do
  95.         sbuf = sbuf .. "+-------"
  96.     end
  97.     sbuf = sbuf .. "+"
  98.     println(sbuf)
  99.     for i = 0, 15 do
  100.         sbuf = string.format("|   %2d", i)
  101.         abuf = convertItoA(i, 2)
  102.         tbuf = string.format("\t|  %4s", abuf)
  103.         sbuf = sbuf .. tbuf
  104.         abuf = convertItoA(i, 8)
  105.         tbuf = string.format("\t|   %2s", abuf)
  106.         sbuf = sbuf .. tbuf
  107.         abuf = convertItoA(i, 16)
  108.         tbuf = string.format("\t|    %-2s |", abuf)
  109.         sbuf = sbuf .. tbuf
  110.         println(sbuf)
  111.     end
  112.     sbuf = ""
  113.     for i = 1, 4 do
  114.         sbuf = sbuf .. "+-------"
  115.     end
  116.     sbuf = sbuf .. "+"
  117.     println(sbuf)
  118. end
  119. if #arg > 0 and "-h" == arg[1] then
  120.     printUsage()
  121.     os.exit(1)
  122. end
  123. makeTable()



실행> lua makeRadixTable.lua

+-------+-------+-------+-------+
|  Dec  |   Bin |  Oct  |  Hex  |
+-------+-------+-------+-------+
|    0  |     0 |    0  |    0  |
|    1  |     1 |    1  |    1  |
|    2  |    10 |    2  |    2  |
|    3  |    11 |    3  |    3  |
|    4  |   100 |    4  |    4  |
|    5  |   101 |    5  |    5  |
|    6  |   110 |    6  |    6  |
|    7  |   111 |    7  |    7  |
|    8  |  1000 |   10  |    8  |
|    9  |  1001 |   11  |    9  |
|   10  |  1010 |   12  |    A  |
|   11  |  1011 |   13  |    B  |
|   12  |  1100 |   14  |    C  |
|   13  |  1101 |   15  |    D  |
|   14  |  1110 |   16  |    E  |
|   15  |  1111 |   17  |    F  |
+-------+-------+-------+-------+




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