将0x字节的尾数转换为实际值


Transforming 0x byte endparts into actual values

我有一个硬件单元,当请求一些数据时,返回一个字符串,当在空间上分解时,返回值数组:

$bytes = array(
    '03',
    '80',
    'A0',
    '01'    // and others, total of 240 entries
);

这些实际上描绘了字节:0x030x800xA00x01。我需要将它们转化为它们的实际价值。

我曾尝试过循环:$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));