在 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的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中将 int 转换为 2 字节的十六进制值

如何在 Swift 中将 Int 转换为十六进制字符串

如何在c#中将十六进制从char []转换为int [重复]

在 PHP 中将十六进制颜色转换为 RGB 值

markdown 在PHP中将字符串转换为十六进制

在 .NET 中将数字转换为十六进制值