2

上下文:我正在读取/写入数据,出于存储原因,这些数据以 24 位整数形式出现(有符号或无符号并不重要,因为它们实际上是 8 个八进制值)。pack我需要用和存储/读取大量这些整数unpack。该应用程序对空间要求很高,因此不希望使用 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'];
}

但也许有更直接的方法?

4

1 回答 1

2

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

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

于 2016-04-23T20:48:08.017 回答