2013-12-12 18 views
0

我有硬件单元,当请求的一些数据,返回字符串,使得当上空间分解,返回值的数组:转化0X字节endparts成实际值

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

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

我已经尝试了一个循环,到:$value = 0x{$byte},$value = {'0x' . $byte}和其他,无济于事。

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

看起来像一个基本的问题,但不能包裹我的头。

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

+0

这些是十六进制数字。你想要的十进制等值? – sfotiadis

+0

@ kabamaru,是的。 – jolt

+0

十六进制($ byte)? –

回答

1

使用chr如果你想有一个字符串

$value = chr($byte); 

使用hexdec如果你想要一个整数

$value = hexdec($byte); 
0

如果$string是原始数据(十六进制数之间用空格隔开),那么你就可以提取二进制数据是这样的:

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

In PHP,字节是同一个字符的长字符串,用下面的转义:

$byte = "\x03"; 

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

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

获得'\x03'字节,与所述参数CHR被解释为一个十六进制整数。

在另一方面,作为@chumkiu mentionned,如果你想获得整数值,下面的代码将工作:

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

我觉得这样的事情就足够了:

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

另请参阅hexdec手册。