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š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



vytlačiť článok  hľadať súvisiace články 



Chat ku článku

Vyhľadávanie na stránke
Reklama
Náhodný obrázok
náhodný obrázok
Kontakty

Martin Kasman, M Software
Smreková 3095/23
Email: martin@kasman.sk

Telefón: 0908 270 294