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

时间:2013-12-12 10:56:21

标签: php byte

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

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

这些实际上描述了字节:0x030x800xA00x01。我需要将它们转换为实际值。

我在循环中试过:$value = 0x{$byte}$value = {'0x' . $byte}和其他人,但无济于事。

还试过unpack,但不知道应用什么格式,对字节有点无能为力。

似乎是一个基本问题,但无法绕过它。

如何动态地将它们转换为实际的整数值?

4 个答案:

答案 0 :(得分:1)

如果你想要一个字符串

,请使用chr
$value = chr($byte);
如果你想要一个整数

,请使用hexdec
$value = hexdec($byte);

答案 1 :(得分:1)

在PHP中,字节与单字符长字符串相同,具有以下转义:

$byte = "\x03";

有一个功能可以帮助你,chr()。 此函数将要获取的字节的ASCII代码作为参数。因为它可以是数字字符串或整数,您可以使用

$code = "03";
$byte = chr("0x" . $code);

获取'\x03'字节,chr的参数被解释为十六进制整数。

另一方面,如@chumkiu所提到的,如果您尝试获取整数值,则以下代码将起作用:

$code = "03";
$int = hexdec($code);

答案 2 :(得分:1)

我认为这样的事情就足够了:

foreach($bytes as byte)
{
    echo hexdec($byte);
}

另见hexdec手册。

答案 3 :(得分:0)

如果$string是原始数据(以空格分隔的十六进制数字),那么您可以像这样提取二进制数据:

$binary = pack('H*',str_replace(' ','',$string));