php使用pack處理二進制文件的方法

來源:文萃谷 2.02W

文章主要介紹了php使用pack處理二進制文件的方法,需要的朋友可以參考下讀寫二進制文件可以使用pack和unpack函數。天要處理一個二進制文件的問題,所以需要用一下,特意瞭解一下pack的用法,unpack用法與此類似。

php使用pack處理二進制文件的方法

簡單來説,pack函數就是給一個目標格式,和相應的參數,就可以返回二進制數據了。

  下面舉例加以説明,對於四個整數:

pack("L4", 0,1,2,3)

pack("LLLL", 0,1,2,3)

pack("L", 0)("L", 1)("L", 2)("L", 3)

上面的處理結果是一樣的,也就是説,format是描述後面的數據的格式。

至於具體format可以用什麼,看看format characters就知道了。

比如一個30字符的 pack("a30", "") ,就是這個意思,很簡單

pack函數的官方聲明如下:

引用

pack

(PHP 3, PHP 4, PHP 5)

pack -- Pack data into binary string

Description

string pack ( string format [, mixed args [, mixed ...]] )

Pack given arguments into binary string according to format. Returns binary string containing data.

The idea to this function was taken from Perl and all formatting codes work the same as there, however, there are some formatting codes that are missing such as Perl's "u" format code. The format string consists of format codes followed by an optional repeater argument. The repeater argument can be either an integer value or * for repeating to the end of the input data. For a, A, h, H the repeat count specifies how many characters of one data argument are taken, for @ it is the absolute position where to put the next data, for everything else the repeat count specifies how many data arguments are consumed and packed into the resulting binary string. Currently implemented are

表格 1. pack() format characters

Code Description

a NUL-padded string

A SPACE-padded string

h Hex string, low nibble first

H Hex string, high nibble first

c signed char

C unsigned char

s signed short (always 16 bit, machine byte order)

S unsigned short (always 16 bit, machine byte order)

n unsigned short (always 16 bit, big endian byte order)

v unsigned short (always 16 bit, little endian byte order)

i signed integer (machine dependent size and byte order)

I unsigned integer (machine dependent size and byte order)

l signed long (always 32 bit, machine byte order)

L unsigned long (always 32 bit, machine byte order)

N unsigned long (always 32 bit, big endian byte order)

V unsigned long (always 32 bit, little endian byte order)

f float (machine dependent size and representation)

d double (machine dependent size and representation)

x NUL byte

熱門標籤