Контекст: я читаю / записываю данные, которые по соображениям хранения представляются в виде 24-разрядных целых чисел (со знаком или без знака не имеет значения, поскольку они на самом деле являются восьмеричными значениями). Мне нужно хранить / читать большое количество этих целых чисел с pack
а также unpack
, Приложение критично к пространству, поэтому использование 32-разрядных целых чисел нежелательно.
Однако в пакете, похоже, нет опции для 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'];
}
а может есть более прямые пути?
Я не знаю, что такое 24-битное целое на любом современном процессоре, поэтому желаемая упаковка не поддерживается напрямую.
Я рекомендую упаковывать ваши байты индивидуально, как вы и предлагали. Будьте внимательны к порядку байтов.
Других решений пока нет …