PHP - 将小端十六进制转换为大端十六进制

问题描述 投票:0回答:2

我正在尝试将 little endian 十六进制转换为 big endian 十六进制。

示例:

小端:

E1 31 01 00 00 9D

大端:

9D 00 00 01 31 E1

php byte endianness pack unpack
2个回答
6
投票

如果数字采用所描述的格式,则可以使用标准数组函数进行转换。

function littleToBigEndian($little) {
  return implode(' ',array_reverse(explode(' ', $little)));
}

echo littleToBigEndian('E1 31 3C 01 00 00 9B');
// Output: 9B 00 00 01 3C 31 E1

如果没有空格用于分隔数字,则需要

str_split()
改为字符串。

function littleToBigEndian($little) {
  return implode('',array_reverse(str_split($little,2)));
}

echo littleToBigEndian('E1313C0100009B');
// Output: 9B0000013C31E1

0
投票

要更改可能包含空格的十六进制字符串的字节序,我将使用以下代码。

function change_endianness(string $input): string {
  $input = str_replace(' ', '', $input);
  $output = bin2hex(implode(array_reverse(str_split(hex2bin($input)))));
  // Add a space every two hexadecimal digits.
  $output = implode(' ', str_split($output, 2));
  // bin2hex() uses lowercase hexadecimal digits;
  // I use strtoupper() to change them to uppercase.
  return strtoupper($output);
}
echo change_endianness('E1 31 3C 01 00 00 9B'), "\n";
9B 00 00 01 3C 31 E1
© www.soinside.com 2019 - 2024. All rights reserved.