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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (372)

我正在尝试将16bitPHP中的十六进制字符串(= signed signed)转换为带符号的十进制数。

(如: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上花了一段时间,但我找不到有效的方法来解决。

谁能帮我?谢谢。

提问于

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励