Contexte: Je suis en train de lire/écrire des données qui, pour des raisons de stockage, sont des entiers de 24 bits (signés ou non signés, 8 valeurs octales). J'ai besoin de stocker/lire un grand nombre de ces entiers avec pack
et unpack
. L'application est critique pour l'espace, donc l'utilisation d'entiers 32 bits n'est pas souhaitable.liste de paquets d'entiers 24 bits dans php
Cependant, pack ne semble pas avoir une option pour les entiers 24 bits. Comment fait-on face à cela? J'utilise actuellement une fonction personnalisée
function pack24bit($n) {
$b3 = $n%256;
$b2 = $n/256;
$b1 = $b2/256;
$b2 = $b2%256;
return pack('CCC',$b1,$b2,$b3);
}
et
function unpack24bit($packed) {
$arr = unpack('C3b',$packed);
return 256*(256*$arr['b1']+$arr['b2'])+$arr['b3'];
}
mais peut-être il y a des moyens plus directs?
Pourriez-vous utiliser la chaîne de format "CS" qui vous donnerait 24 bits? – Graeme
soyez conscient que la taille de php int dépend de la plate-forme. Ils pourraient être 32 bits. Ils pourraient également être 64 bits –
@ nl-x Pourriez-vous expliquer comment cette remarque se rapporte à ma question? Je ne pense pas que cela ait de l'importance quand 24 bits sont le maximum avec lequel je travaille. – user1111929