Kontext: Ich lese/schreibe Daten, die aus Speichergrund als 24-Bit-Ganzzahlen kommt (mit oder ohne Vorzeichen ist nicht wichtig, da sie tatsächlich 8 Oktalwerte sind). Ich muss eine große Anzahl dieser Ganzzahlen mit pack
und unpack
speichern/lesen. Da die Anwendung platzkritisch ist, ist die Verwendung von 32-Bit-Ganzzahlen nicht wünschenswert.pack Liste der 24-Bit-Ganzzahlen in PHP
Allerdings scheint Pack keine Option für 24-Bit-Ganzzahlen zu haben. Wie geht man damit um? Ich verwende derzeit eine benutzerdefinierte Funktion
function pack24bit($n) {
$b3 = $n%256;
$b2 = $n/256;
$b1 = $b2/256;
$b2 = $b2%256;
return pack('CCC',$b1,$b2,$b3);
}
und
function unpack24bit($packed) {
$arr = unpack('C3b',$packed);
return 256*(256*$arr['b1']+$arr['b2'])+$arr['b3'];
}
aber vielleicht gibt es mehr direkte Wege?
Könnten Sie die Formatzeichenfolge "CS" verwenden, die 24 Bit ergibt? – Graeme
beachten Sie, dass die PHP-Int-Größe plattformabhängig ist. Sie könnten 32 Bit sein. Sie könnten auch 64 Bit sein –
@ nl-x Könnten Sie erklären, wie sich diese Bemerkung auf meine Frage bezieht? Ich glaube nicht, dass das wichtig ist, wenn ich mit 24 Bits am meisten arbeite. – user1111929