FileStream fs = new FileStream("C:\\testdds.exe", FileMode.Open, FileAccess.Read);
int fileLength = Convert.ToInt32(fs.Length);
//得到对像大小
byte[] fileByteArray = new byte[fileLength];
//声明一个byte数组
BinaryReader br = new BinaryReader(fs);
//声明一个读取二进流的BinaryReader对像
for (int i = 0; i < fileLength; i++)
{//循环数组
br.Read(fileByteArray, 0, fileLength);
//将数据读取出来放在数组中
}
string linshi="";
for (int i = 0; i < fileByteArray.Length; i++)
{
int b = fileByteArray[i];
string bb = Convert.ToString(b, 16);
linshi = linshi + bb;
}
linshi的确被转换成正确的16进制
但我发现当中的00没有被加载到linshi变量中,然后我将linshi变量遍历变成byte[]数组写出的文件也跟原来的文件大小差了一点,并且无法打开。
那个00是不是跟什么对齐有关系?
请问这个问题怎么解决...
单独把Convert.ToString的结果打出来看
那个linshi里面不确实对照了么?就是那个00没有。
Convert.ToString 打印出来是十六禁止的数据,截图当中在c32 asm当中也对照了,确实正确。
但是我发现00的就不对照了,想知道是什么原因。。
记得以前书里哪里瞄到过cpu填充对其什么东西的。
我是自学的,不容易啊。
还在认为是00没了
你就没自己去测试过
Convert.ToString(77, 16); --> "4d"
Convert.ToString(90, 16); --> "5a"
Convert.ToString(144, 16); --> "90"
Convert.ToString(0, 16); --> "0"
Convert.ToString(3, 16); --> "3"
合起来就是4d5a9003
明白了么
4d5a9003....................这些占的字节与原来少四分之一 我感觉就是00没有进去的原因
Convert.ToString(0, 16); --> "0"
Convert.ToString(3, 16); --> "3"
这两个怎么处理啊?
C# 为了满足不同场合的需求,提供了很多方法供你选用
static void Main(string[] args)
{
byte[] b = { 77, 90, 144, 0, 3 };
Console.WriteLine(Convert.ToString(b[3], 16)); //0
Console.WriteLine(b[3].ToString("x2")); //00
Console.WriteLine(BitConverter.ToString(b)) //4D-5A-90-00-03;
}
我来告诉你,那是为有的字节只有一位,比如0,或者3,你加一下判断,if(bb.Length == 1){bb = "0" + bb;}这样就可www.9iBee.com以了,
string str = null;
for (int i = 0; i < fileByteArray.Length; i++)
{
int b = fileByteArray[i];
str = string.Format("{0} {1:X02}", str, b);
}
结果:4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00
有点久远了 看见的晚 希望对后来人有帮助