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();
}谁知道将上面的代码转成php怎么写啊?

解决方案 »

  1.   

    有专门的工具?????要么他对C 和 PHP 都较熟练
      

  2.   

    这个很简单么
    分不太,不想写了。
    参数函数
    file
    fopen
    fseek
      

  3.   


    function readBinFileCrc($filename)
    {
    $res='';
    $f = fopen($filename,'rb');
    fseek($f,-4,SEEK_END);
    $res = fread($f,4);
    $i=$res[3] & 0xFF;
    $i = ($i << 8) | ($res[2] & 0xFF);
    $i = ($i << 8) | ($res[1] & 0xFF);
    $i = ($i << 8) | ($res[0] & 0xFF);
    fclose($f);
    return $i;
    }看看是不是这样的
      

  4.   

    不行啊。我在php上执行
    function readBinFileCrc($filename)
    {
        $res='';
        $f = fopen($filename,'rb');
        fseek($f,-4,SEEK_END);
        $res = fread($f,4);
        $i=$res[3] & 0xFF;
        $i = ($i << 8) | ($res[2] & 0xFF);
        $i = ($i << 8) | ($res[1] & 0xFF);
        $i = ($i << 8) | ($res[0] & 0xFF);
        fclose($f);
        return $i;
    }echo readBinFileCrc("C:/Apache2.2/htdocs/WebMex/MexFile/Mexbin/com/aa.txt");结果是50397697,
    在winform上执行
    string path = "C:/Apache2.2/htdocs/WebMex/MexFile/Mexbin/com/aa.gif";
                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);
                Console.WriteLine(i.ToString());
                Console.Read();结果是858862129,再帮我解决下呗!
      

  5.   

    C#里的路径应该是aa.txt。另外就是php中后缀不能为gif,我只测试了三个,txt和doc都可以。
      

  6.   

    好奇怪的写法!
                int i = (buffer[3] & 0xFF);
                i = (i << 8) | (buffer[2] & 0xFF);
                i = (i << 8) | (buffer[1] & 0xFF);
                i = (i << 8) | (buffer[0] & 0xFF);
    只是将 buffer 解释成 long 类型的数,即便是 C# 这样写也无此必要直接翻译就是
        $i=$res[3] & 0xFF;
        $i = ($i << 8) | ($res[2] & 0xFF);
        $i = ($i << 8) | ($res[1] & 0xFF);
        $i = ($i << 8) | ($res[0] & 0xFF);
    至于所得结果不同(其实是一样的)是因为 php 没有无符号(unsigned)类型修饰
    你只需
    $i = array_pop(unpack('l', $res));
    即可能得到 858862129 的原串为 1213