在PHP中将unsigned long转换为signed short

时间:2018-11-13 00:55:02

标签: php

在其他一些语言中,此问题只是一个简单的强制转换问题。在PHP中没有这样的概念,因为所有整数都具有完全相同的类型(带符号long long或带符号long,取决于体系结构)。但是在某些情况下,您必须这样做。例如。 unpack()无法读取signed long小尾数字节顺序,只能是无符号的。

因此,给定虚数 32位无符号整数4294967295,如何从中获得虚数有符号32位整数的值? (即-1。)

例如this can be done with pack/unpack,但是对我来说,这似乎不是最佳选择。

有更好的方法吗?

32位版本的PHP怎么样? (他们倾向于通过整数溢出来“自动”解决此问题,但我宁愿不使用这种依赖于体系结构的解决方法。Background.

1 个答案:

答案 0 :(得分:0)

例如,可以使用pack / unpack

$value = 4294967295;
$result = unpack("l", pack('L', $value));
var_dump($result[1]); // -1

Try live.