PHP pack, unpack, Ord function using method (binary stream Interface application example)
Blog Category:
PHP binary Packunpackord in the work, I also gradually 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:
PHP code
- A character
- $str = (Pack ( "A *", "China"));
- Echo $str, "=", strlen ( $str), "byte \ n";
- Getascill ( $str);
- echo ' <br/> ';
- H character
- $str = (Pack ( "h*", "Fffe"));
- Echo $str, "=", strlen ( $str), "byte \ n";
- Getascill ( $str);
- echo ' <br/> ';
- C character
- $str = (Pack ( "c*", "n", "57") ;
- Echo $str, "=", strlen ( $str), "byte \ n";
- Getascill ( $str);
- echo ' <br/> ';
- I-character short-shaped 32-bit 4-byte 64-bit 8-byte
- $str = (Pack ( "i", "100"));
- Echo $str, "=", strlen ( $str), "byte \ n";
- Getascill ( $str);
- echo ' <br/> ';
- s character short shaping 2 bytes
- $str = (Pack ( "s", "100"));
- Echo $str, "=", strlen ( $str), "byte \ n";
- Getascill ( $str);
- echo ' <br/> ';
- L character-length shaping 4 bytes
- $str = (Pack ( "L", "100"));
- Echo $str, "=", strlen ( $str), "byte \ n";
- Getascill ( $str);
- echo ' <br/> ';
- F-character single-precision floating-point 4 bytes
- $str = (Pack ( "F", "100"));
- Echo $str, "=", strlen ( $str), "byte \ n";
- Getascill ( $str);
- echo ' <br/> ';
- D-character double-precision floating-point 8 bytes
- $str = (Pack ( "D", "100"));
- Echo $str, "=", strlen ( $str), "byte \ n";
- Getascill ( $str);
- echo ' <br/> ';
- 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
PHP code
- $code =Array (
- "username" = =Array ("A20","Zhang San adfb12"),
- "Pass" =Array ("A10","asdf* #1"),
- "Age" = =Array ("C", "All"),
- "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 below.
- 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.
PHP code
- $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 + +;
- }
- return $ATARR;
- }
Citation: http://randomclan.blog.163.com/blog/static/1453009820125454418912/