请教一个mysql协议数据打包的问题

如下官方文档描述DATETIME格式的物理存储:
https://dev.mysql.com/doc/int...
补充
https://dev.mysql.com/doc/int...

DATETIME
Storage: eight bytes.
Part 1 is a 32-bit integer containing year10000 + month100 + day.
Part 2 is a 32-bit integer containing hour10000 + minute100 + second.
Example: a DATETIME column for '0001-01-01 01:01:01' looks like: hexadecimal B5 2E 11 5A 02 00 00 00

使用如下代码模拟封包流程,当然是不正确的。

$data1 = 1*10000+1*100+1;
$data2 = 1*10000+1*100+1;

//小端序32位pack
$str1 = pack("V", $data1);
for ($i = 0; $i < strlen($str1); $i++) {
    echo dechex(ord($str1[$i]))." ";
}
//小端序32位pack
$str2 = pack("V", $data2);
for ($i = 0; $i < strlen($str2); $i++) {
    echo dechex(ord($str2[$i]))." ";
}

如上代码输出 75 27 0 0 75 27 0 0。
如文档所说输出 B5 2E 11 5A 02 00 00 00 使用php实现是怎么的一个pack封包过程?

白猪掌柜的
浏览 390回答 1
1回答

慕哥6287543

php目前不支持 64位 pack打包和解包,只能用32位,V代替,$data1 . $data2 = 10101010101; 解包相关代码 $d = $this->read(8); $data = unpack('V*', $d); $data[1] + ($data[2] << 32); 压缩同样height = 10101010101 >> 32 ,高位low = 10101010101 - ((10101010101 >> 32) << 32)) 低位pack('V',height)+pack('V',low)
打开App,查看更多内容
随时随地看视频慕课网APP