Funcțiile de lucru cu datele binare - pack () și despachetarea ()

De fapt, există două astfel de funcții - pack () și despachetare (). Prima realizează dozarea datelor într-un șir binar, iar al doilea - împachetează datele dintr-un șir binar. Personal, nu am avut încă de utilizat aceste funcții, cu excepția cazului când am pregătit exemple de utilizare a acestora pentru acest capitol. Dar cine știe, poate că cineva are nevoie de ei, așa că vom avea puțină distracție cu ei.







Funcția pack () împachetează argumentele specificate în parametrul său într-un șir binar. Formatul parametrilor și numărul acestora sunt specificați cu parametrul format $. cu ajutorul acelorași specificatori de formatare, despre care am vorbit, numai fără semnul%. După fiecare specificator, poate exista un număr care să indice câte informații vor fi procesate de acest specificator. Pentru formatele a. A. h și H este numărul specifică numărul de caractere care urmează să fie plasate într-un șir binar de cele care sunt parametru-line atunci când apelarea unei funcții (adică mărimea liniei câmpului de ieșire este de fapt determinat). Dacă folosim specificatorul "@", atunci vom determina poziția absolută în care vor fi plasate datele. Pentru toate celelalte calificative, următoarele numere definesc numărul de argumente la care se aplică acest format. În locul numărului, puteți specifica *. în acest caz calificatorul acționează asupra tuturor datelor rămase. Rețineți că funcția returnează datele ambalate în format hexazecimal.







Lista specificatorilor de format:

  • a - o linie, spațiile libere în câmp sunt umplute cu un simbol cu ​​codul 0;
  • A - șir, spațiile goale sunt umplute cu spații;
  • h - un șir hexazecimal, cifre de ordin inferior la început;
  • H - șirul hexazecimal, cele mai înalte cifre de la început;
  • c este un byte semnat (simbol);
  • C - octet nesemnat;
  • s este un număr întreg scurt semnat;
  • S - număr scurt nesemnat;
  • n este un întreg nesemnat (16 biți, biți de ordin înalt la sfârșit);
  • v - întreg nesemnat (16 biți, biți de ordin inferior la sfârșit);
  • i este un număr întreg semnat (dimensiunea și ordinea octeților este determinată de arhitectură);
  • Eu sunt un întreg nesemn;
  • l este un număr întreg lung semnat (32 de biți, ordinea semnelor este determinată de arhitectură);
  • L - întreg lung negru;
  • N - număr întreg lung nesemnat (32 biți, biți de ordin înalt la sfârșit);
  • V - număr întreg nesemnat (32 biți, biți cel mai puțin semnificativ la sfârșit);
  • f este un număr punct floating;
  • d este numărul de precizie dublă;
  • x este un caracter de cod zero;
  • X - întoarcere înapoi cu 1 octet;
  • @ - umplerea codului zero în poziția absolută specificată.

După cum sa menționat mai sus, dezarhivează datele dintr-un șir binar în funcție de format. Funcția returnează o matrice care conține elementele despachetate.

Să încercăm să împachetăm ceva. De exemplu, așa.

Deci, ceea ce am văzut: funcția a returnat 6 octeți și în această secvență:

0x57, 0x22, 0x48, 0x11, 0x00, 0x41, 0x00, 0x42. Este clar de ce. Conform formatului de contact specificat (NVN *), primul număr ne-am întors ca un întreg fără semn cu MSB la sfârșitul celei de a doua, de asemenea, ca un întreg fără semn, dar în cele din urmă - biți semnificativi (așa ne-am întors 0x48, 0x11 și nu 0x11, 0x48), și tot restul până la capăt ne întoarcem ca un întreg nesemnificat cu cele mai înalte cifre la sfârșit.







Articole similare

Trimiteți-le prietenilor: