我正在尝试将 little endian 十六进制转换为 big endian 十六进制。
示例:
小端:
E1 31 01 00 00 9D
大端:
9D 00 00 01 31 E1
如果数字采用所描述的格式,则可以使用标准数组函数进行转换。
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
要更改可能包含空格的十六进制字符串的字节序,我将使用以下代码。
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