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怎么写啊?
分不太,不想写了。
参数函数
file
fopen
fseek
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;
}看看是不是这样的
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,再帮我解决下呗!
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