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.
'프로그래밍 > Boo' 카테고리의 다른 글
Boo 언어로 역삼각함수, 역쌍곡선함수 값을 구하는 예제 (0) | 2013.01.06 |
---|---|
스트링 배열 정렬(sorting)하기 for .NET with Boo (0) | 2009.04.20 |
삼각형 출력 예제를 통한 여러 가지 소스 비교 with Boo (0) | 2009.04.08 |
클래스 상속(subclassing) 예제 with Boo (0) | 2009.04.04 |
손으로 계산하는 긴자리 곱셈표 만들기 with Boo (0) | 2009.04.04 |