PHP pack, unpack binary stream Interface application example

Source: Internet
Author: User
Tags ord unpack vars

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+)

Parameters Describe
Format Necessary. Specifies the format to use when wrapping the data.
args+ Optional. Specifies one or more parameters that are packaged.

Character Description
A Fills the string blank with a NULL character
A Fills the string blank with space characters (spaces)
H 16 string, low in front
H 16 string, high in front
C Character with number
C No number character
S Number of short integers (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 No number short integers (16 bits, low in the back order)
I Number of integers (depending on the order and scope of the computer)
I unsigned integers (depending on the computer's order and range)
L Number of long integers (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 No number short integers (32 bits, low in the back order)
F Single-precision floating-point number (depending on the computer's range)
D Times the exact floating point number (depending on the computer's range)
X Vacancy
X Rewind One
@ Fill in the NULL character to the absolute position

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

Syntax : Unpack (format,args+)

Parameters Describe
Format Necessary. Specifies the format to use when wrapping the data.
args+ 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
A character
$str = (Pack ("A *", "China"));
echo $str, "=", strlen ($STR), "Byte \ n";
Getascill ($STR);
H character
$str = (Pack ("h*", "Fffe"));
echo $str, "=", strlen ($STR), "Byte \ n";
Getascill ($STR);
C character
$str = (Pack ("c*", "55", "56", "57"));
echo $str, "=", strlen ($STR), "Byte \ n";
Getascill ($STR);

I-character short-shaped 32-bit 4-byte 64-bit 8-byte
$str = (Pack ("I", "100"));
echo $str, "=", strlen ($STR), "Byte \ n";
Getascill ($STR);

s character short shaping 2 bytes
$str = (Pack ("s", "100"));
echo $str, "=", strlen ($STR), "Byte \ n";
Getascill ($STR);

L character-length shaping 4 bytes
$str = (Pack ("L", "100"));
echo $str, "=", strlen ($STR), "Byte \ n";
Getascill ($STR);

F-character single-precision floating-point 4 bytes
$str = (Pack ("F", "100"));
echo $str, "=", strlen ($STR), "Byte \ n";
Getascill ($STR);

D-character double-precision floating-point 8 bytes
$str = (Pack ("D", "100"));
echo $str, "=", strlen ($STR), "Byte \ n";
Getascill ($STR);

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:

Parameters Describe
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]View Plaincopyprint?
  1. $code =Array (
  2. "username" = =Array ("A20","Zhang San adfb12"),
  3. "Pass" =Array ("A10","asdf* #1"),
  4. "Age" = =Array ("C", "All"),
  5. "Birthday" = =Array ("I","19900101"),
  6. "Email" = =Array ("A50","[email protected]"));
  7. $stream =join ("n", Packbyarr ($code));
  8. Echo $stream,strlen ($stream);
  9. File_put_contents ("C:/1.txt",$stream); //Save the stream for easy reading below.
  10. function Packbyarr ($arr) {
  11. $ATARR =Array ();
  12. foreach ($arr as $k = =$v) {
  13. $ATARR []=pack ($v [0],$v [1]);
  14. }
  15. return $ATARR;
  16. }
  17. function Getascill ($str) {
  18. $arr =str_split ($str);
  19. foreach ($arr as $v) {
  20. echo $v,"=", Ord ($v),"\ n";
  21. }
  22. }

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]View Plaincopyprint?
  1. $code =Array (
  2. "username" = =Array ("A20"),
  3. "Pass" =Array ("A10"),
  4. "Age" = =Array ("C"),
  5. "Birthday" = =Array ("I"),
  6. "Email" = =Array ("A50"));
  7. $stream =file_get_contents ("C:/1.txt");
  8. Var_dump (Packbyarr ($stream,$code));
  9. function Packbyarr ($str,$code) {
  10. $ARR =explode ("n",$str);
  11. $ATARR =Array ();
  12. $i = 0;
  13. foreach ($code as $k = =$v) {
  14. $ATARR [$k]=unpack ($v [0],$Arr [$i]);
  15. $i + +;
  16. }
  17. return $ATARR;
  18. }

PHP pack, unpack binary stream interface application instance

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.