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往下是什么意思啊!谁给详细解释一下!

解决方案 »

  1.   


    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();
        }
    }
      

  2.   

    用另外一种方式来写。
    ReadInt32,不是更容易看懂吗?
      

  3.   

     int i = (buffer[3] & 0xFF);                //取出第四个字节的值
         i = (i << 8) | (buffer[2] & 0xFF);     //将第四个字节的值左移动一个字节,并上第三个                                                  字节的值
         i = (i << 8) | (buffer[1] & 0xFF);     
         i = (i << 8) | (buffer[0] & 0xFF);
    比如buffer存的是{1,2,3,4},运算后就是4321,就是简单的位运算
      

  4.   


     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……
      

  5.   

    例如{1,2,3,4},换成二进制是{00000001,00000010,00000011,00000100}
    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);