C# 언어 소스:
// Filename: TestHexView03.cs
//
// Compile: csc TestHexView03.cs
// Execute: TestHexView03 [filename]
//
// Date: 2013. 7. 31.
using System;
using System.IO;
public class TestHexView03 {
public static void PrintUsage() {
Console.WriteLine("TestHexView03 [filename]");
}
public static String toHex(byte b) {
String s = "";
int x1, x2;
x1 = (b & 0xF0) >> 4;
x2 = b & 0x0F;
if (x1 < 10)
s += (char)('0' + x1);
else
s += (char)((x1 - 10) + 'A');
if (x2 < 10)
s += (char)('0' + x2);
else
s += (char)((x2 - 10) + 'A');
return s;
}
public static String toHex8(int n) {
String s = "";
int x1, x2, x3, x4, x5, x6, x7, x8;
x1 = (int)((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 += (char)(x1 + '0');
else
s += (char)((x1 - 10) + 'A');
if (x2 < 10)
s += (char)(x2 + '0');
else
s += (char)((x2 - 10) + 'A');
if (x3 < 10)
s += (char)(x3 + '0');
else
s += (char)((x3 - 10) + 'A');
if (x4 < 10)
s += (char)(x4 + '0');
else
s += (char)((x4 - 10) + 'A');
s += " ";
if (x5 < 10)
s += (char)(x5 + '0');
else
s += (char)((x5 - 10) + 'A');
if (x6 < 10)
s += (char)(x6 + '0');
else
s += (char)((x6 - 10) + 'A');
if (x7 < 10)
s += (char)(x7 + '0');
else
s += (char)((x7 - 10) + 'A');
if (x8 < 10)
s += (char)(x8 + '0');
else
s += (char)((x8 - 10) + 'A');
return s;
}
private static bool IsDirectory(string path)
{
System.IO.FileAttributes fa = System.IO.File.GetAttributes(path);
bool isDirectory = false;
if ((fa & FileAttributes.Directory) != 0)
{
isDirectory = true;
}
return isDirectory;
}
public static void Main(string[] args) {
if (args.Length < 1) {
PrintUsage();
Environment.Exit(1);
}
String filename = args[0];
BinaryReader br = null;
try {
if (!File.Exists(filename)) {
Console.WriteLine("The file \"" + filename + "\" does not exist.");
Environment.Exit(1);
}
if (IsDirectory(filename)) {
Console.WriteLine("The file \"" + filename + "\" is a directory.");
Environment.Exit(1);
}
long fileSize = new FileInfo(filename).Length;
if (fileSize < 1L) {
Console.WriteLine("The file size is zero.");
Environment.Exit(1);
}
Console.WriteLine("The size of the file \"" + filename + "\" is " + fileSize + ".\n");
br = new BinaryReader(File.Open(filename, FileMode.Open));
long n = 0L;
int data;
String dum = "";
while (n < fileSize && (data = br.ReadByte()) != -1) {
if (n % 16 == 0L) {
Console.Write(toHex8((int) (n & 0xFFFFFFFF)) + ": ");
}
if (n % 16 != 8L) {
Console.Write(" ");
}
else {
Console.Write("-");
}
Console.Write( toHex((byte) (data & 0xFF)) );
if ((data & 0xFF) >= 0x20 && (data & 0xFF) <= 0x7E) {
dum += (char) (data & 0xFF);
}
else {
dum += ".";
}
if (n > 0 && n % 16 == 15L) {
Console.Write(" |");
Console.Write(dum);
Console.Write("|");
Console.WriteLine();
dum = "";
}
n++;
}
if (n > 0 && n % 16 > 0) {
for (int i = (int)(n % 16); i < 16; i++) {
Console.Write(" ");
}
Console.Write(" |");
Console.Write(dum);
for (int i = (int)(n % 16); i < 16; i++) {
Console.Write(" ");
}
Console.Write("|");
Console.WriteLine();
dum = "";
}
Console.WriteLine();
Console.WriteLine("Read " + n + " bytes");
}
catch (IOException ex)
{
Console.WriteLine("Error message: " + ex.Message);
}
finally
{
if (br != null)
{
br.Close();
}
}
}
}
실행 예 1> TestHexView03 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> TestHexView03 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
'프로그래밍 > C#' 카테고리의 다른 글
원시 피타고라스 삼조를 생성하는 C# 소스 (0) | 2020.03.01 |
---|---|
피타고라스 수를 생성하는 C# 소스 (0) | 2020.02.29 |
C# 언어로 작성하여 실행해 본 OpenGL 예제: Redbook 의 Teapots (0) | 2013.05.17 |
C# 언어로 작성하여 실행해 본 OpenGL 예제: Redbook 의 Cube (0) | 2013.05.10 |
C# 에서 xmpir 사용하기 (0) | 2013.01.24 |