php 中 24 位整数的打包列表

pack list of 24-bit integers in php

上下文:我是 reading/writing 数据,出于存储原因,它以 24 位整数形式出现(有符号或无符号并不重要,因为它们实际上是 8 个八进制值)。我需要 store/read 大量具有 packunpack 的整数。该应用程序是 space-关键应用程序,因此不希望使用 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 位整数这样的东西,这就是为什么不直接支持您想要的包装的原因。

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