Parsing binary Stream Interface Application Example Pack, unpack, Ord function usage _php Tutorial

Source: Internet
Author: User
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.
Description of the pack function:This function is used to compress the data into a string that is packed into 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 a 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:
Copy CodeThe code is as follows:
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:
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
Copy CodeThe code is as follows:
$code =array (
"Username" =>array ("A20", "Zhang San Adfb12"),
"Pass" =>array ("A10", "asdf* #1"),
"Age" =>array ("C", "23"),
"Birthday" =>array ("I", "19900101"),
"Email" =>array ("A50", "zhangsan@163.com"));
$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.
Copy CodeThe code is as follows:
$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;
}
?>

http://www.bkjia.com/PHPjc/327691.html www.bkjia.com true http://www.bkjia.com/PHPjc/327691.html techarticle 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 was recently ...

  • 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.