PHP中如何将字符串形式的UInt64拆分为两个UInt32值
PHP中如何将字符串形式的UInt64拆分为两个UInt32值
嘿,我来给你捋捋这个问题的解决办法~
咱们都清楚PHP本身不支持UInt64类型,要是直接把字符串形式的UInt64转成数字,百分百会丢失位信息,就拿UInt64的最大值18446744073709551615来说,转成数字肯定出问题。
我一开始的思路是用PHP的pack和unpack函数来处理,具体代码如下:
$number = "18446744073709551615"; $packed = pack('J', $number); $value1 = unpack('N', substr($packed, 0, 4))[1]; $value2 = unpack('N', substr($packed, 4, 4))[1]; var_dump($packed); // 输出 7fffffffffffffff
给你拆解下每一步的作用:
pack('J', $number)会把字符串形式的UInt64打包成大端字节序的64位无符号整数二进制数据,这个过程完全不会受PHP数字类型的限制,也就不会丢位;- 接着用
substr把打包后的二进制数据切成前4字节和后4字节,这两段分别对应UInt64的高32位和低32位; - 最后用
unpack('N', ...)把每一段4字节的二进制数据解析成大端字节序的32位无符号整数,这样就得到了咱们需要的两个UInt32值$value1和$value2。
备注:内容来源于stack exchange,提问作者Thom McGrath
相关产品推荐
相关产品推荐

