php 中 24 位整数的打包列表
pack list of 24-bit integers in php
上下文:我是 reading/writing 数据,出于存储原因,它以 24 位整数形式出现(有符号或无符号并不重要,因为它们实际上是 8 个八进制值)。我需要 store/read 大量具有 pack
和 unpack
的整数。该应用程序是 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 位整数这样的东西,这就是为什么不直接支持您想要的包装的原因。
我建议按照您的建议单独打包您的字节。注意字节顺序。
上下文:我是 reading/writing 数据,出于存储原因,它以 24 位整数形式出现(有符号或无符号并不重要,因为它们实际上是 8 个八进制值)。我需要 store/read 大量具有 pack
和 unpack
的整数。该应用程序是 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 位整数这样的东西,这就是为什么不直接支持您想要的包装的原因。
我建议按照您的建议单独打包您的字节。注意字节顺序。