在 PHP 中将十六进制转换为 int64
Posted
技术标签:
【中文标题】在 PHP 中将十六进制转换为 int64【英文标题】:Converting hex to int64 in PHP 【发布时间】:2012-03-28 13:40:35 【问题描述】:如何在 php 中将十六进制 48ea369a4c120000
转换为 64 位整数 20120214104648
(小端字节序)?
hexdec()、base_convert() 和 unpack() 没有帮助。
请看下面的截图。
【问题讨论】:
该小数点看起来非常像日期时间 (2012-02-14 10:46:48) - 如果是,请尝试将其转换为 unix 时间戳进行传输,这将产生在2038 之前的 32 位边界,所以你不会有这个问题。 【参考方案1】:如果您考虑endiannes,则48ea369a4c120000
有2 个值。
Little endian = 20120214104648
Big endian = 5254071951610216448
48ea369a4c120000
的小端值可以通过以下过程计算。
$data="48ea369a4c120000";
$u = unpack("H*", strrev(pack("H*", $data)));
$f = hexdec($u[1]);
echo $f; // 20120214104648
注意:这是手动完成的,因为主机的字节序不同。如果主机具有相同的字节序,则只需调用一次hexdec
就足够了。
【讨论】:
64bit int of 48ea369a4c120000(hex) 必须为 20120214104648。hexdec() 不会转换为 64bit @Antonix 试试here,你也会得到5254071951610216448
。
@Antonix 你的 PHP 版本是什么,我看到它适用于我的 PHP 5.3.2
是的,我确定,在 c++ 中没问题,并且 48ea369a4c120000 转换为 20120214104648
如果您在计算机上运行 this code 并看到预期的输出,则您的编译器是 64 位的。如果你的编译器不是 64 位的,你会看到被截断的输出。【参考方案2】:
你可以试试hexdec()。
$integer = hexdec('48ea369a4c120000'); // $integer is now the decimal version of the number provided.
但是请注意,如果结果数字超出平台存储的范围(例如,32 位平台需要 64 位),那么您将得到一个浮点数,而不是整数。
【讨论】:
64bit int of 48ea369a4c120000(hex) 必须为 20120214104648。hexdec() 不会转换为 64bit @Antonix 这不是真的。只需 google '0x48ea369a4c120000 in decimal' 或将其输入 wolfram alpha .. 如果您使用 PHP 不支持的无符号整数,48ea369a4c120000 只是 20120214104648。 hexdec() 确实支持 64 位整数,如果它运行的平台支持的话。以上是关于在 PHP 中将十六进制转换为 int64的主要内容,如果未能解决你的问题,请参考以下文章