PHP 中的 24 位整数打包列表


pack list of 24-bit integers in php

上下文:我正在读取/写入数据,出于存储原因,数据以 24 位整数形式出现(有符号或无符号无关紧要,因为它们实际上是 8 个八进制值)。我需要用 packunpack 存储/读取大量这些整数。该应用程序对空间至关重要,因此不希望使用 32 位整数。

但是,pack 似乎没有 24 位整数的选项。如何处理这个问题?我目前使用自定义函数

function pack24bit($n) {
    $b3 = $n%256;
    $b2 = $n/256;
    $b1 = $b2/256;
    $b2 = $b2%256;
    return pack('CCC',$b1,$b2,$b3);
}

function unpack24bit($packed) {
    $arr = unpack('C3b',$packed);
    return 256*(256*$arr['b1']+$arr['b2'])+$arr['b3'];
}

但也许有更直接的方法?

据我所知,在任何现代 CPU 上都没有 24 位整数这样的东西,这就是为什么不直接支持您想要的打包的原因。

我建议按照您的建议单独打包您的字节。注意字节序。