gpt4 book ai didi

php - 在 PHP 中将 Int 转换为 4 字节字符串

转载 作者:行者123 更新时间:2023-12-02 21:23:25 25 4
gpt4 key购买 nike

我需要将无符号整数转换为 4 字节字符串以在套接字上发送。

我有以下代码,它可以工作,但感觉......恶心。

/**
* @param $int
* @return string
*/
function intToFourByteString( $int ) {
$four = floor($int / pow(2, 24));
$int = $int - ($four * pow(2, 24));
$three = floor($int / pow(2, 16));
$int = $int - ($three * pow(2, 16));
$two = floor($int / pow(2, 8));
$int = $int - ($two * pow(2, 8));
$one = $int;

return chr($four) . chr($three) . chr($two) . chr($one);
}

我使用 C 的 friend 说我应该能够通过位移来做到这一点,但我不知道如何做,而且他对 PHP 不够熟悉,无法提供帮助。任何帮助将不胜感激。

要执行相反的操作,我已经有了以下代码

/**
* @param $string
* @return int
*/
function fourByteStringToInt( $string ) {
if( strlen($string) != 4 ) {
throw new \InvalidArgumentException('String to parse must be 4 bytes exactly');
}

return (ord($string[0]) << 24) + (ord($string[1]) << 16) + (ord($string[2]) << 8) + ord($string[3]);
}

最佳答案

这实际上很简单

$str = pack('N', $int);

参见pack 。反之亦然:

$int = unpack('N', $str)[1];

如果您好奇如何使用位移位进行打包,如下所示:

function intToFourByteString( $int ) {
return
chr($int >> 24 & 0xFF).
chr($int >> 16 & 0xFF).
chr($int >> 8 & 0xFF).
chr($int >> 0 & 0xFF);
}

基本上,每次移位八位并用 0xFF (=255) 进行掩码以删除高位。

关于php - 在 PHP 中将 Int 转换为 4 字节字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26184947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com