Boo 언어 소스:

#  Filename: testHexView_02.boo
#
#   Execute: booi testHexView_02.boo [filename]
#
#    Or
#
#   Compile: booc testHexView_02.boo
#   Execute: testHexView_02 [filename]
#
# Date: 2013. 8. 16.

import System
import System.IO

def printUsage():
    print "Usage: booi testHexView_02 [filename]"

def isDirectory(path as string) as bool:
    fa = System.IO.File.GetAttributes(path)
    isDir = false
    if (fa & FileAttributes.Directory) != 0:
        isDir = true
    return isDir

def ascii(s as string) as int:
    arr = array(s)
    n = cast(int, arr[0])
    return n

def toChar(n as int) as char:
    a = cast(char, n)
    return a

def toHex(b as int) as string:
    s = ""
    x1 = (b & 0xF0) >> 4
    x2 = b & 0x0F
    if x1 < 10:
        s += toChar(ascii('0') + x1)
    else:
        s += toChar((x1 - 10) + ascii('A'))
    if x2 < 10:
        s += toChar(ascii('0') + x2)
    else:
        s += toChar((x2 - 10) + ascii('A'))
    return s

def toHex8(n as int) as string:
    s = ""
    x1 = (n & 0xF0000000) >> 28
    x2 = (n & 0xF000000) >> 24
    x3 = (n & 0xF00000) >> 20
    x4 = (n & 0xF0000) >> 16
    x5 = (n & 0xF000) >> 12
    x6 = (n & 0xF00) >> 8
    x7 = (n & 0xF0) >> 4
    x8 = n & 0x0F
    if x1 < 10:
        s += toChar(ascii('0') + x1)
    else:
        s += toChar((x1 - 10) + ascii('A'))
    if x2 < 10:
        s += toChar(ascii('0') + x2)
    else:
        s += toChar((x2 - 10) + ascii('A'))
    if x3 < 10:
        s += toChar(ascii('0') + x3)
    else:
        s += toChar((x3 - 10) + ascii('A'))
    if x4 < 10:
        s += toChar(ascii('0') + x4)
    else:
        s += toChar((x4 - 10) + ascii('A'))
    s += ' '
    if x5 < 10:
        s += toChar(ascii('0') + x5)
    else:
        s += toChar((x5 - 10) + ascii('A'))
    if x6 < 10:
        s += toChar(ascii('0') + x6)
    else:
        s += toChar((x6 - 10) + ascii('A'))
    if x7 < 10:
        s += toChar(ascii('0') + x7)
    else:
        s += toChar((x7 - 10) + ascii('A'))
    if x8 < 10:
        s += toChar(ascii('0') + x6)
    else:
        s += toChar((x8 - 10) + ascii('A'))
    return s

if argv.Length < 1:
    printUsage()
    Environment.Exit(1)

filename = argv[0]
if isDirectory(filename):
    Console.WriteLine("The file \"" + filename + "\" is a directory.")
    Environment.Exit(1)

if not File.Exists(filename):
    print "The file \"" + filename + "\" does not exist."
    return

fileSize = FileInfo(filename).Length;
print "The size of the file \"" + filename + "\" is " + fileSize + "."
print

br = BinaryReader(File.Open(filename, FileMode.Open))
dum = ""
n = 0L
while n < fileSize:
    if n % 16 == 0L:
        Console.Write(toHex8(n) + ": ")
    data = br.ReadByte()
    if n % 16 != 8L:
        Console.Write(" ")
    else:
        Console.Write("-")
    Console.Write(toHex(data))

    if (data & 0xFF) >= 0x20 and (data & 0xFF) <= 0x7E:
        dum += toChar(data & 0xFF)
    else:
        dum += "."

    if n > 0 and n % 16 == 15L:
        Console.Write("  |")
        Console.Write(dum)
        Console.Write("|")
        Console.WriteLine()
        dum = ""

    n += 1

if n > 0 and n % 16 > 0:
    for i in range(16 - (n % 16)):
        Console.Write("   ")
    Console.Write("  |")
    Console.Write(dum)
    for i in range(16 - (n % 16)):
        Console.Write(" ")
    Console.Write("|")
    Console.WriteLine()
    dum = ""

Console.WriteLine()
Console.WriteLine("Read " + n + " bytes.")

 

실행 예 1> booi testHexView_02.boo temp_1.bin
The size of the file "temp_1.bin" is 12.

0000 0000:  48 65 6C 6C 6F 20 74 68-65 72 65 0A              |Hello there.    |

Read 12 bytes.

실행 예 2> booi testHexView_02.boo myFile.ser
The size of the file "myFile.ser" is 130.

0000 0000:  AC ED 00 05 73 72 00 06-50 65 72 73 6F 6E 07 31  |....sr..Person.1|
0000 0010:  46 DB A5 1D 44 AB 02 00-03 49 00 03 61 67 65 4C  |F...D....I..ageL|
0000 0020:  00 09 66 69 72 73 74 4E-61 6D 65 74 00 12 4C 6A  |..firstNamet..Lj|
0000 0030:  61 76 61 2F 6C 61 6E 67-2F 53 74 72 69 6E 67 3B  |ava/lang/String;|
0000 0040:  4C 00 08 6C 61 73 74 4E-61 6D 65 71 00 7E 00 01  |L..lastNameq.~..|
0000 0050:  78 70 00 00 00 13 74 00-05 4A 61 6D 65 73 74 00  |xp....t..Jamest.|
0000 0060:  04 52 79 61 6E 73 71 00-7E 00 00 00 00 00 1E 74  |.Ryansq.~......t|
0000 0070:  00 07 4F 62 69 2D 77 61-6E 74 00 06 4B 65 6E 6F  |..Obi-want..Keno|
0000 0080:  62 69                                            |bi              |

Read 130 bytes.

 

 

Posted by Scripter
,