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);
}
我希望这是有道理的。任何帮助都会得到最多的关注:)
由于
答案 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}}部分。