public string ReadBinFileCrc(string path)
{
byte[] buffer = new byte[4];
FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
fileStream.Seek(fileStream.Length-4,SeekOrigin.Begin);
fileStream.Read(buffer,0,4);
fileStream.Close(); int i = (buffer[3] & 0xFF);
i = (i << 8) | (buffer[2] & 0xFF);
i = (i << 8) | (buffer[1] & 0xFF);
i = (i << 8) | (buffer[0] & 0xFF);
return i.ToString();
}
这个里面的从int i往下是什么意思啊!谁给详细解释一下!
public string ReadBinFileCrc(string path)
{
using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
fileStream.Seek(-4, SeekOrigin.End);
return new BinaryReader(fileStream).ReadInt32().ToString();
}
}
ReadInt32,不是更容易看懂吗?
i = (i << 8) | (buffer[2] & 0xFF); //将第四个字节的值左移动一个字节,并上第三个 字节的值
i = (i << 8) | (buffer[1] & 0xFF);
i = (i << 8) | (buffer[0] & 0xFF);
比如buffer存的是{1,2,3,4},运算后就是4321,就是简单的位运算
public static void Main(String[] args)
{
//string path = "d:/aa.txt";
byte[] buffer = new byte[4];
//FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
//fileStream.Seek(fileStream.Length - 4, SeekOrigin.Begin);
//fileStream.Read(buffer, 0, 4);
//fileStream.Close();
buffer[0] = 1;
buffer[1] = 2;
buffer[2] = 3;
buffer[3] = 4;
//Console.WriteLine(ReadBinFileCrc(path));
for (int j = 0; j < buffer.Length; j++)
{
Console.WriteLine(buffer[j].ToString());
}
int i = (buffer[3] & 0xFF);
i = (i << 8) | (buffer[2] & 0xFF);
i = (i << 8) | (buffer[1] & 0xFF);
i = (i << 8) | (buffer[0] & 0xFF);
Console.WriteLine(i.ToString());
Console.Read();
}按照楼上所说应该是4321,但是出来的是67305985……
int i = (buffer[3] & 0xFF); //取出第四个字节的值
00000100 & 11111111 = 00000100 //就是4, & 0xFF 这样一般就是取出最后一个字节的值 i = (i << 8) | (buffer[2] & 0xFF); //将第四个字节的值左移动一个字节,并上第三个 字节的值
i << 8 左移八位就成了 00000100 00000000
buffer[2] & 0xFF
00000011 & 11111111 = 00000011
(i << 8) | (buffer[2] & 0xFF)
00000100 00000000 | 00000011 =00000100 00000011 //就是把3加到4的后面,后面同理
位运算多用几次你就不讨厌了! i = (i << 8) | (buffer[1] & 0xFF);
i = (i << 8) | (buffer[0] & 0xFF);