为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
白猪掌柜的 2019-03-12 11:53:25
如下官方文档描述DATETIME格式的物理存储:https://dev.mysql.com/doc/int...补充https://dev.mysql.com/doc/int... DATETIMEStorage: 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封包过程?
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

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)

查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 389 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信