gpt4 book ai didi

php - UNPACK()4个字节转换为整数PHP套接字

转载 作者:行者123 更新时间:2023-12-03 11:54:15 25 4
gpt4 key购买 nike

我正在阅读一个套接字,在所有问题都以为我们发送了错误的信息之后,事实证明阅读存在问题。

这个想法是:

1a- Get 4 bytes, unpack (95).
2a- Get 95 next bytes.
1b- Get 4 bytes, unpack (80).
2b- Get 80 next bytes.

我打开包装错误,或者发生了某些事情。我得到的输出是:
1a- get 4 bytes, unpacked=0.
2a- get 0 next bytes. (no return)
1b- get 4 bytes, unpacked=95.
2b- get 95 bytes, get $message.

$ message的前2个字节丢失,因此我认为它在末尾加2,这应是下一个重复的4个字节。我认为问题在于0字节,否则解包是错误的。
while (!feof($connect)) {
$i='';
$size_get=fgets($fconnect, 4);
$size=unpack('C',$size_get);
echo fgets($connect, $size[1]) . PHP_EOL;
}

最佳答案

您遇到的问题是您读取了4个字节($size_get=fgets($fconnect, 4);),但是随后您告诉unpack您正试图用'C'格式解压缩单个字符。可以在pack的文档中找到不同的格式。

考虑到这一点,下面是一个完整的示例,该示例将字节字符串转换为32位无符号整数:

<?php
$value = "\x12\x34\xAB\xCD";
echo "Value is: " . unpack("Nval", $value)['val'] . "\n";
?>

您可以验证它是否正确执行,并在此 fiddle 中输出期望的值( 305441741): http://ideone.com/PzbvXk

对于您的特定问题,您将代码更改为:
$size = unpack("Nval", $size_get)['val'];
echo fgets($connect, $size) . PHP_EOL;

关于php - UNPACK()4个字节转换为整数PHP套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292267/

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