Forum und email
pack

pack

(PHP 3, PHP 4, PHP 5)

pack -- Sbalí data do binárního řetězce.

Popis

string pack ( string format [, mixed args [, mixed ...]] )

Sbalí předané argumenty do binárního řetězce podle argumentu format. Vrací binární řetězec obsahující předaná data.

Nápad na tuto funkci byl převzat z Perlu, a všechny formátovací kódy fungují stejně jako tam, nicméně, některé formátovací kódy chybí, jako například Perlovský formátovací kód "u". Formátovací řetězec sestává z formátovacích kódu následovaných volitelným opakovacím argumentem. Opakovací argument může být buď celočíselná hodnota, nebo * pro opakování do konce vstupních dat. U a, A, h, H počet opakování určuje, kolik znaků se vezme z jednoho datového argumentu, u @ je to absolutní pozice, kde se mají umístit další data, u všeho ostatního počet opakování určuje, kolik datových argumentů se spotřebuje a sbalí do výsledného binárního řetězce. V současnosti jsou implementovány

  • a řetězec doplněný NUL hodnotami

  • A řetězec doplněný SPACE hodnotami

  • h Hex řetězec, spodní slabika první

  • H Hex řetězec, horní slabika první

  • c signed char

  • C unsigned char

  • s signed short (vždy 16 bitů, machine byte order)

  • S unsigned short (vždy 16 bitů, machine byte order)

  • n unsigned short (vždy 16 bitů, big endian byte order)

  • v unsigned short (vždy 16 bitů, little endian byte order)

  • i signed integer (velikost a pořadí bytů závislá na systému)

  • I unsigned integer (velikost a pořadí bytů závislá na systému)

  • l signed long (vždy 32 bitů, machine byte order)

  • L unsigned long (vždy 32 bitů, machine byte order)

  • N unsigned long (vždy 32 bitů, big endian byte order)

  • V unsigned long (vždy 32 bitů, little endian byte order)

  • f float (velikost a reprezentace závislá na systému)

  • d double (velikost a reprezentace závislá na systému)

  • x NUL byte

  • X Back up one byte

  • @ NUL-fill to absolute position

Příklad 1. pack() formátovací řetězec

$binarydata = pack ("nvc*", 0x1234, 0x5678, 65, 66);

Výsledný binární řetězec bude 6 bytů dlouhý, a bude obsahovat bytovou sekvenci 0x12, 0x34, 0x78, 0x56, 0x41, 0x42.

Všimněte si, že rozdíl mezi hodnotami se znaménkem a bez znaménka ovlivňuje pouze funkci unpack(), zatímco funkce pack() dává stejný výsledek pro formátovací kódy se znaménkem i bez znaménka.

Dále si všimněte, že PHP interně ukládá celočíselné hodnoty jako hodnoty se znaménkem o velikosti závislé na systému. Pokud zadáte hodnotu bez znaménka, která bude příliš velká, než aby se dala takto uložit, převede se na double, což často vytváří nežádoucí výsledky.