pack
Syntax
string pack(string format, mixed [args]...);
Popis
Príkaz jazyka PHP sbalí data do binárního řetězce.
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
Príklad
$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ý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.
Pozri aj
unpack