如何将十六进制字符串(或二进制数字)转换为带符号的缩写? (PHP)

时间:2018-07-23 22:44:42

标签: php binary hex unpack

我正在尝试在PHP中将16bit(=有符号的短整数)的十六进制字符串转换为有符号的十进制数字。

(例如:0xFEF5-> -267)(如果需要转换二进制文件,则0xFEF5-> 1111 1110 1111 0101-> -267)

我建立了packunpack函数。然后,我写了一些代码,但这是分开的作品。

$bin = hex2bin('0020'); //0020 -> 32(dec) 0000 0000 0010 0000(bin)
$res = unpack("c2char", $bin);
//-> $res = ['char1':0,'char2':32] it works!

$bin = hex2bin('FFE3'); //FFE3 -> -29(dec) 1111 1111 1110 0011(bin)
$res = unpack("c2char", $bin);
//-> $res = ['char1':-1, 'char2':-29] it works!

但是由于16位数据在s上设置了unpack参数时,它不起作用。

$bin = hex2bin('0020');
$res = unpack("s*short", $bin);
//-> $res = ['short1': 8192] //not works

$bin = hex2bin('FFE3');
$res = unpack('s*short", $bin);
//-> $res = ['short1': -7169] //not works...

如果还有其他方法可以在不使用unpack的情况下用带符号的十六进制十进制,则可以。我没有使用unpack的迷恋。 或者,如果还有其他方法可以将带符号的二进制转换为十进制,也可以。

我在Google住了一段时间,但找不到有效的解决方法。

有人可以帮助我吗? 谢谢。

0 个答案:

没有答案
相关问题