我有一个Hex字符串,它读取18000000
这个字符串是主机字节顺序(Little endian),我需要将它转换为网络字节顺序(Big endian)。生成的十六进制字符串将为00000018
。
总结一下,我需要转换
18000000 to 00000018
我如何在PHP中实现这一目标?
答案 0 :(得分:2)
您可以使用pack
/ unpack
函数转换字节顺序:
/**
* Convert $endian hex string to specified $format
*
* @param string $endian Endian HEX string
* @param string $format Endian format: 'N' - big endian, 'V' - little endian
*
* @return string
*/
function formatEndian($endian, $format = 'N') {
$endian = intval($endian, 16); // convert string to hex
$endian = pack('L', $endian); // pack hex to binary sting (unsinged long, machine byte order)
$endian = unpack($format, $endian); // convert binary sting to specified endian format
return sprintf("%'.08x", $endian[1]); // return endian as a hex string (with padding zero)
}
$endian = '18000000';
$big = formatEndian($endian, 'N'); // string "00000018"
$little = formatEndian($endian, 'V'); // string "18000000"
要详细了解pack
格式,请查看http://www.php.net/manual/en/function.pack.php
答案 1 :(得分:0)
另一种方式
$input = 18000000;
$length=strlen((string)$input);
$sum=0;
$numbers="";
while ($length>0) {
$number = $input % 10;
$numbers.= $number;
$input = $input/10;
$length--;
}
echo $numbers;
答案 2 :(得分:0)
我在搜索某些内容时偶然发现了这个答案,但我最终做了一些更简单的事情(因为我知道我的字符串总是会有一个前导零,如果有必要对齐两个字符边界):
$littlendian = join(array_reverse(str_split($bigendian), 2)));
显然,如果您的bigendian输入格式不是那么好,这个技巧不会直接起作用:)
答案 3 :(得分:0)
尝试一下:
$result=bin2hex( implode( array_reverse( str_split( hex2bin($src) ) ) ) );