PHP pack, unpack, Ord function using method (binary source interface application example)

Source: Internet
Author: User
Tags unpack
PHP pack, unpack, Ord function using method (binary stream Interface application example)
At work, I also learned that Pack,unpack,ord is powerful for binary byte processing. Let me introduce them to you. In our work, there is not much estimation of their use. I am in a recent job, because the communication needs to use the binary stream, and then the interface is received in PHP. At that time, a lot of information was consulted. Because they are really less used, they are seldom used by friends in their work. At work, I also learned that Pack,unpack,ord is powerful for binary byte processing. Let me introduce them to you.
Pacrk function Description: This function is used to compress data into a string in place.


Syntax: Pack (format,args+)

Parameter description
Format required. Specifies the format to use when wrapping the data.
Args+ is optional. Specifies one or more parameters that are packaged.


Character description
A fills the string blank with a NULL character
A fills the string blanks with space characters (spaces)
H 16 string, low in front
H 16 string, high in front
C with number characters
C No number character
S has a short integer (16 bits, depending on the computer's bit order)
S no-number short integer (16 bits, depending on the computer's bit order)
n unsigned short integers (16-bit, high-order in the back)
V Short Integer (16 bits, low in the back order)
I number integers (depending on the computer's order and range)
I no-number integers (depending on the computer's order and range)
L number Long Integer (32 bits, depending on the computer's bit order)
L unsigned long integers (32 bits, depending on the computer's bit order)
N unsigned short integers (32-bit, high-order in the back)
V short Integer (32 bits, low in the back order)
F Single precision floating point number (depending on the range of the computer)
D-times accurate floating point number (depending on the computer's range)
X vacancy
X Rewind One
@ Fill in NULL characters to absolute position


Unpack function Description: This function is used to extract the data of the bit string

Syntax: Unpack (format,args+)

Parameter description
Format required. Specifies the format to use when wrapping the data.
Args+ is optional. Specifies one or more parameters that are packaged.

The parameters are the same as the pack.

Ord function Description: Returns the Acill code value of the corresponding character

Syntax: Ord ($character);


Example Description:
A character $str = (Pack ("*", "China"), echo $str, "=", strlen ($STR), "Byte \ n"; Getascill ($STR); Echo '
';//h character $str = (Pack ("h*", "Fffe"), echo $str, "=", strlen ($STR), "Byte \ n"; Getascill ($STR); Echo '
';//c character $str = (Pack ("c*", "" "," "", "" ")" echo $str, "=", strlen ($STR), "Byte \ n"; Getascill ($STR); Echo '
';//i character short shaping 32 bits 4 bytes 64 bits 8 Bytes $str = (Pack ("I", "" "), echo $str," = ", strlen ($STR)," Byte \ n "; Getascill ($STR); echo '
';//s character short shaping 2 bytes $str = (Pack ("s", "X"), echo $str, "=", strlen ($STR), "Byte \ n"; Getascill ($STR); Echo '
';//l character length 4 bytes $str = (Pack ("L", "+"), echo $str, "=", strlen ($STR), "Byte \ n"; Getascill ($STR); Echo '
';//f character single-precision floating point 4 bytes $str = (Pack ("F", "+"), echo $str, "=", strlen ($STR), "Byte \ n"; Getascill ($STR); Echo '
';//d character double-precision floating point 8 bytes $str = (Pack ("D", "+"), echo $str, "=", strlen ($STR), "Byte \ n"; Getascill ($STR); Echo '
'; function Getascill ($str) {$arr = Str_split ($STR); foreach ($arr as $v) {echo $v, "=", Ord ($v), "\ n";} echo "=============\r\n\r\n";}


With the above example, we can see that the same string, stored in a different format, consumes a different number of bytes. It can also be seen here that saving characters in different formats can save space for storage. and start the unreadable encryption effect. Suddenly think of a bit, Design database field type problems, if a field is just: 10-bit length integer type. We set it to reshape: 256*256*256*256 is 4 bytes, if set to 10 length string. That accounts for 10 bytes. The whole digestive space is twice times the size. Setting the correct character type is a great help in improving database performance. Oh, a little off-topic ...




A case analysis of PHP processing byte code communication
Just said pack function: space-saving, encrypted format

Here are 2 examples to illustrate, interface development requirements:


Parameter description
User name 20 bytes, character type
Password 10 bytes, character type
Age 1 Bytes, no character char type
Date of birth 4 bytes, integer (19800101)
Mailbox 50 Bytes, string
Between fields: "\" split
A, pack Packaging

$code =array ("username" =>array ("A20", "Zhang San Adfb12"), "Pass" =>array ("A10", "asdf* #1"), "Age" =>array ("C", "23") , "Birthday" =>array ("I", "19900101"), "email" =>array ("A50", "[email protected]")); $stream =join ("n", Packbyarr ($code)); Echo $stream, strlen ($stream);  File_put_contents ("C:/1.txt", $stream);    Save the stream for easy reading of  function Packbyarr ($arr)  {          $atArr =array ();          foreach ($arr as $k = + $v) {                   $atArr []=pack ($v [0], $v [1]);          }          return $ATARR; } function Getascill ($str) {          $arr =str_split ($STR);          foreach ($arr as $v) {                   echo $v, "=", Ord ($v), "\ n";          


The entire length is 89 bytes, because it is split with "\". With the above output, some string output can be read, the others have become garbled. This is what I said can be kept secret effect reason.

B, unpack unpacking
The unpacking needs to be read in a packaged manner, the length of the read, what type to read, and the same as the packing rules.

$code =array ("username" =>array ("A20"), "Pass" =>array ("A10"), "Age" =>array ("C"), "Birthday" =>array ("I") , "email" =>array ("A50")); $stream =file_get_contents ("C:/1.txt"); Var_dump (Packbyarr ($stream, $code)); function Packbyarr ($STR, $code) {          $Arr =explode ("n", $str);          $ATARR =array ();          $i =0;          foreach ($code as $k = + $v) {                   $atArr [$k]=unpack ($v [0], $ARR [$i]);                   $i + +;          }          



Citation: http://randomclan.blog.163.com/blog/static/1453009820125454418912/
  • Related Article

    Contact Us

    The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

    If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.