我有一个硬件单元,当请求一些数据时,返回一个字符串,当在空间上分解时,返回值数组:
$bytes = array(
'03',
'80',
'A0',
'01' // and others, total of 240 entries
);
这些实际上描绘了字节:0x03
、0x80
、0xA0
、0x01
。我需要将它们转化为它们的实际价值。
我曾尝试过循环:$value = 0x{$byte}
、$value = {'0x' . $byte}
和其他,但都无济于事。
也尝试过unpack
,但不知道应用什么格式,对字节有点一无所知。
这似乎是一个基本问题,但我无法理解。
如何动态地将它们转换为实际的整数值?
如果想要字符串,请使用chr
$value = chr($byte);
如果您想要一个整数,请使用hexdec
$value = hexdec($byte);
在PHP中,字节与一个字符长的字符串相同,具有以下转义:
$byte = "'x03";
有一个函数可以帮助您,它就是chr()。此函数将要获取的字节的ASCII代码作为参数。由于它可以是数字字符串或整数,因此可以使用
$code = "03";
$byte = chr("0x" . $code);
以获得''x03'
字节,其中参数to chr被解释为十六进制整数。
另一方面,正如@chumkiu所说,如果你试图获得整数值,下面的代码会起作用:
$code = "03";
$int = hexdec($code);
我认为这样的东西就足够了:
foreach($bytes as byte)
{
echo hexdec($byte);
}
另请参阅hexdec手册。
如果$string
是原始数据(用空格分隔的十六进制数字),则可以提取如下二进制数据:
$binary = pack('H*',str_replace(' ','',$string));