Php 如何将十六进制字符串(或二进制数)转换为有符号短字符?(菲律宾)
我试图在PHP中将16位(=有符号短)的十六进制字符串转换为有符号十进制数 (例如:0xFEF5->-267)(如果需要转换二进制文件,则0xFEF5->1111111110101->-267) 我创建了Php 如何将十六进制字符串(或二进制数)转换为有符号短字符?(菲律宾),php,binary,hex,unpack,Php,Binary,Hex,Unpack,我试图在PHP中将16位(=有符号短)的十六进制字符串转换为有符号十进制数 (例如:0xFEF5->-267)(如果需要转换二进制文件,则0xFEF5->1111111110101->-267) 我创建了pack和unpack功能。然后,我写了一些代码,但它是分开的作品 $bin = hex2bin('0020'); //0020 -> 32(dec) 0000 0000 0010 0000(bin) $res = unpack("c2char", $bin); //-> $res
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!
但当设置s
参数为unpack
时,由于16位数据,它不起作用
$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...
如果有其他方法将十六进制转换为带符号的十进制,而不使用解包
,则可以。我不喜欢使用解包。
或者,如果有其他方法将二进制转换为带符号的十进制,也可以
我在谷歌花了一段时间,但我找不到有效的解决方法
有人能帮我吗?
谢谢。您是否尝试过php手册中的hexdec函数hexdec()
将在这里实现这个技巧,但只是为了让您理解:s
函数的s
格式是机器字节顺序,在您的情况下,它是小尾端,而您更喜欢大尾端。遗憾的是,16位大端有符号整数没有格式$res=unpack('s*short',$bin);//$res->-29它可以工作!
谢谢你黑洞!我想不出那个窍门。谢谢你的帮助!