упаковать список 24-битных целых чисел в переполнение стека

Контекст: я читаю / записываю данные, которые по соображениям хранения представляются в виде 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'];
}

а может есть более прямые пути?

2

Решение

Я не знаю, что такое 24-битное целое на любом современном процессоре, поэтому желаемая упаковка не поддерживается напрямую.

Я рекомендую упаковывать ваши байты индивидуально, как вы и предлагали. Будьте внимательны к порядку байтов.

2

Другие решения

Других решений пока нет …