【问题标题】:PHP Convert Byte to byte arrayPHP将字节转换为字节数组
【发布时间】:2019-11-24 13:07:39
【问题描述】:

我的代码接收到一些带有像48656C6C6F 这样的字节字段的json,我正在尝试将它转换为像array[0] = 48, array[1]=65 ... 这样的数组中的字节对,以便处理每个字节。

其实我做了这个旁路功能是为了得到数组:

function Array_conv($hex){
    $chunks = str_split($hex, 2);
    $result = implode(',', $chunks);
    return $result;
}

问题是,有一个正确的方法来转换为字节数组,或者像 0x48 这样的十六进制..

谢谢!

【问题讨论】:

  • 你如何从你的字节字段48656C6C6F得到array[1]=34
  • 您的问题到底是什么? Yoru 代码似乎可以正常工作?我将它们作为逗号分隔值(因为您使用 implode())。
  • 另外,请记住实际上有一个名为array_chunk() 的PHP 函数(你的拼写错误,这就是它起作用的原因)。您可能需要考虑一个不同的名称。
  • 考虑如果长度不是两个字节对的有效对,如果字符串是F59,你会想要0x0F0x59作为一个值吗?
  • @Qirel 我正在寻找的是一种将字节“字符串”转换为字节对的方法,以便在之后进行一些逐位操作,例如抓住第一个配对并应用一些数学运算获取第一个 GPS 坐标编号。

标签: php arrays byte converters


【解决方案1】:

PHP 中的字符串非常适合访问每个字节作为数组。

$hex = "48656C6C6F";
$string = hex2bin($hex);
var_dump($string);  //string(5) "Hello"

函数 strlen() 以字节为单位返回长度。通过一个简单的 for 循环,您可以获得每个字节。使用 ord() 您可以将字节作为 0 到 255 之间的无符号整数。

$byteLen = strlen($string);
for($i=0; $i < $byteLen; $i++){
  $byte = $string[$i];
  echo ord($byte).",";
}

输出:

72,101,108,108,111,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 2021-11-11
    • 2011-07-02
    • 2019-12-10
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多