我有一个十六进制字符串,其内容为
18000000
此字符串采用主机字节顺序(小端),我需要将其转换为网络字节顺序(大端)。生成的十六进制字符串将为 00000018
。
总结一下我需要转换
18000000 to 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/en/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;
试试这个:
$result=bin2hex( implode( array_reverse( str_split( hex2bin($src) ) ) ) );