You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP变量赋值时值莫名变更求助:unpack结果赋值后值异常

问题分析与解决建议

首先看你的输出,print_r($infos)明确显示$infos[2] = 1,但赋值给$nb后输出变成132,这看起来矛盾,但大概率是输出显示或变量污染导致的,而非赋值本身出问题。

排查步骤:

  • 先确认$nb的真实值:把print(' nb '.$nb);改成var_dump($nb);,看输出的是int(1)还是int(132)。如果是int(1),那问题出在终端编码或输出拼接的显示上;如果确实是int(132),再往下查。
  • 检查变量是否被提前定义:在$nb = $infos[2];前加一行var_dump(isset($nb));,如果返回true,说明$nb在这段代码之前已经被赋值,且可能是全局变量或被其他逻辑修改了。
  • 排查引用赋值污染:如果之前有类似$nb = &$someOtherVariable;的代码,即使你重新赋值,$nb可能还是指向其他变量的引用,导致值被意外修改。可以在赋值前加unset($nb);解除引用。
  • 隔离PHPUnit环境干扰:PHPUnit如果没有正确隔离测试用例,可能会残留上一个测试的变量值。你可以单独写一个极简测试用例,只包含这段解析代码,看是否还出现问题。
  • 简化代码验证环境:直接写$nb = 1; print(' nb '.$nb);,看输出是否正常。如果还是显示132,说明是终端编码或PHP输出设置的问题,比如mb_output_handler导致的编码转换。

补充说明:

你的unpack('n2', ...)用法是对的,00 01按大端序解析就是1,这部分逻辑没问题。问题大概率出在变量环境或输出显示层面,而非二进制解析逻辑。

内容的提问来源于stack exchange,提问作者Jean-Rémi Lapierre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:45:09