我有一个十六进制字符串,它是以主机字节顺序(小端)表示的,如18000000
。我需要将其转换为网络字节顺序(大端)表示。结果的十六进制字符串应该是00000018
。
简而言之,我需要将18000000转换为00000018
在PHP中如何实现?
我有一个十六进制字符串,它是以主机字节顺序(小端)表示的,如18000000
。我需要将其转换为网络字节顺序(大端)表示。结果的十六进制字符串应该是00000018
。
简而言之,我需要将18000000转换为00000018
在PHP中如何实现?
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/zh/function.pack.php
我在搜索某些内容时偶然发现了这个答案,但最终我做了一件更简单的事情(因为我知道我的字符串总是会有一个前导零,以便对齐到两个字符边界):
$littlendian = join(array_reverse(str_split($bigendian), 2)));
另一种方式
$input = 18000000;
$length=strlen((string)$input);
$sum=0;
$numbers="";
while ($length>0) {
$number = $input % 10;
$numbers.= $number;
$input = $input/10;
$length--;
}
echo $numbers;
0A0B0C0D
字符串会产生错误)是无效的。 - undefined试试这个:
$result=bin2hex( implode( array_reverse( str_split( hex2bin($src) ) ) ) );
00000081
。 - undefined