我有一个十六进制字符串,内容如下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 http://www.php.net/manual/en/function.pack.php
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)