这是我在这里的第一个问题 - 所以我提前为任何错误道歉。
我目前从事一个项目,其中包括一个 C++ 程序,与运行 PHP 的 Web 服务器进行通信。
我已经多次使用 PHP 的解包/打包,但总是使用整个字节,通常是浮点数和 int32,以及填充字符串。但是现在,为了节省一些带宽,我们决定将 C 的输出“压缩”为更小的整数。
这是我的问题:
PHP 从 C 中获取的数据大致如下(即 1 个字节):
(uint8_t)hc.OnOff << 1
| (uint8_t)hc.No1 << 2
| (uint8_t)hc.No2 << 3
| (uint8_t)hc.No3 << 4
| (uint8_t)hc.No4 << 5
| (uint16_t)hc.No5 << 6;
我试图以多种方式解开它。但我没有得到正确的结果。而且我知道在位方面我只是愚蠢的。:)
我得到的最接近的是使用这样的东西:
$bit = unpack('C*', $bit);
$bit = $bit['1'];
$bin = decbin(ord($bit));
$bin = str_pad($bin, 8, 0, STR_PAD_LEFT);
但这仍然不是预期的结果。
有人有其他提示吗?
我为我糟糕的二进制知识道歉,我知道我必须阅读更多关于这个主题的内容。