使用IO在C#中读取十六进制

时间:2011-04-10 14:34:30

标签: c# io hex

HI, 我是C#从Java迁移的新手。尝试使用HEX中的IO读取文件。当我读到第一个字节时,我没有得到我在Hex编辑器中看到的内容。

我正在使用

StreamReader reader = new StreamReader(fileDirectory);
int hexIn;
String hex;

for (int i = 0; (hexIn = reader.Read()) != -1; i++){
    hex = Convert.ToString(hexIn, 16);
}

在Java中我用过......

    FileInputStream fis = new FileInputStream(file);
    long length = file.length();

    int hexIn;
    String hex = "";

    for(int i = 0; (hexIn = fis.read()) != -1; i++){

        String s = Integer.toHexString(hexIn);
        if(s.length() < 2){
            s = "0" + Integer.toHexString(hexIn);
        }

我希望这是有道理的。任何帮助都会得到最多的关注:)

由于

2 个答案:

答案 0 :(得分:12)

不要使用StreamReader - 仅适用于特定编码中的字符(默认UTF8)。改为使用FileStream类:

FileStream fs = new FileStream(fileDirectory, FileMode.Open);
int hexIn;
String hex;

for (int i = 0; (hexIn = fs.ReadByte()) != -1; i++){
    hex = string.Format("{0:X2}", hexIn);
}

答案 1 :(得分:0)

您需要这样的C#代码才能获得与Java代码相同的结果:

hex = hexIn.ToString("X").PadLeft(2, '0');

Convert.ToString也有效,但IMO使用整数的原始ToString是更好的做法。
无论如何,你错过了确实导致15为'f'而不是PadLeft的{​​{1}}部分。