我正在尝试将16bit
PHP中的十六进制字符串(= signed signed)转换为带符号的十进制数。
(如:0xFEF5 - > -267)(如果需要转换二进制,0xFEF5 - > 1111 1110 1111 0101 - > -267)
我创立pack
并unpack
运作。然后,我写了一些代码,但它是分开的作品。
$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上花了一段时间,但我找不到有效的方法来解决。
谁能帮我?谢谢。
发布于 2018-09-03 15:07:41
您是否尝试过php手册中的hexdec功能? http://php.net/manual/en/function.hexdec.php
https://stackoverflow.com/questions/-100006096
复制相似问题