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

 

 

Posted by Scripter
,