Packing과 Unpack은 일반 프로그램에서는 정말 보기 쉽지 않은데, 오래전부터 PHP를 사용해 엑셀을 생성해본 분들이라면 아실 겁니다. 그 사람 엑셀 헤더가 꽉 차있어요
최근에 C와 인터랙션 하려고 할 때 이걸 또 사용해서 다시 살펴보게 됐어요. 사실 나에게 바오터우를 요구한 건 C였다. . . 사실 순수 스트링도 좋습니다. 왜 빵을 얻어야합니까? 정말 혼란스러워요...
설명서에 포장과 포장 풀기에 대한 소개가 있지만 모두 영어로 되어 있습니다. . .
소켓 작업 기능을 갖춘 모든 언어에는 패키지 어셈블리에 특별히 사용되는 기능이 있으며, PHP도 예외는 아닙니다! > 저는 오랫동안 PHP를 사용해왔지만 일부 바이너리 작업을 수행하기 위해 PHP를 사용할 기회가 거의 없었습니다. 최근에는 C++ 언어로 개발된 게임 서버에 연결하기 위해 PHP를 사용하여 소켓 클라이언트를 작성했습니다. 서버측 개발자는 바이너리 형식을 사용하여 프로토콜 형식을 정의합니다. 프로토콜 형식은 다음과 같습니다.
Baot 헤더(2bytes) + 암호화(1byte) + 명령 코드(2bytes) + 프레임 내용 1. 패킷 헤더의 내용은 다음과 같습니다. 기록된 프레임 내용;
2.암호화: 0은 암호화 없음을 의미합니다. 3. 명령 코드는 서버 측 개발자에게 여러 가지 개발에 도움을 요청했습니다. C 언어의 메모리 작업 함수를 사용하고 프로토콜 규칙에 따라 바이너리 패키지를 반환합니다. 그런 다음 이러한 메서드를 PHP가 사용할 확장 함수 집합으로 컴파일했습니다.
본 글에서는 다시 본론으로 돌아와 pack 및 unpack 메소드 사용법을 소개합니다. 공식 PHP 매뉴얼에는 이해하기 쉽도록 예제가 너무 적습니다. 특히 형식 지정 매개변수의 사용은 더욱 그렇습니다. 전송 매개변수에 대한 중국어 설명:
Pack/Unpack 템플릿 문자 의미a 공백으로 채워진 바이트 문자열A 공백으로 채워진 바이트 문자열
b 비트 A 문자열, the 각 바이트의 비트 순서는 오름차순 B 비트 문자열, 각 바이트의 비트 순서는 내림차순 c 부호 있는 문자(8비트 정수) 값
C 부호 없는 문자(8- 비트 정수) 값, 유니코드의 경우 U
d 기본 형식의 배정밀도 부동 소수점 숫자
f 기본 형식의 단정밀도 부동 소수점 숫자
h 16진수 문자열, 하위 순서를 참조하세요. 숫자 우선
H 16진수 문자열, 상위 숫자 우선
i 부호 있는 정수 값, 기본 형식
I 부호 없는 정수 값, 기본 형식
l 부호 있는 long, 항상 32비트
L 부호 없는 긴 정수, 항상 32비트
n 16비트 짧은 "네트워크" 바이트 순서(큰 끝부터)
N 32비트 짧은 정수, "네트워크" 바이트 순서(큰 끝부터)
p Null 종료 문자열에 대한 포인터
P 고정 길이 문자열에 대한 포인터
q Null 종료 문자열에 대한 포인터 부호 있는 쿼드(64비트 정수) 값
Q 부호 없는 쿼드 (64비트 정수) 값
부호 있는 짧은 정수 값, 항상 16비트
S 부호 없는 짧은 정수 값, 항상 16비트,
바이트 순서는 머신 칩과 관련됩니다
u 인코딩되지 않은 문자열
U 유니코드 문자 숫자
v "VAX" 바이트 순서(리틀 엔디안) 16비트 짧은 정수
"VAX" 바이트 순서의 V(리틀 엔디안)
w BER 압축 정수 x 널 바이트(리틀 엔디안) 바이트 무시) [, 혼합 $args [, 혼합 $...]] )
일부 규칙:
1 각 문자 뒤에는 개수를 나타내는 숫자가 올 수 있습니다. 개수가 *이면 모든 항목의 나머지 부분을 의미합니다.
2. $format에 필요한 것보다 적은 수의 매개변수를 제공하는 경우 pack은 모든 누락된 값을 null로 가정합니다. $format에 필요한 것보다 더 많은 매개변수를 제공하면 추가 매개변수는 무시됩니다.
아래 예를 사용하면 이해하기가 더 쉽습니다.
PHP 코드
- 팩 정보:
-
-
아래 첫 번째 부분은 숫자 값을 바이트로 압축합니다.
- $out = pack("CCCC", 65, 66, 67, 68); >$out은 "ABCD"
- $out과 같습니다. = pack("C4", 65, 66, 67, 68)
- 다음은 유니코드 루프 문자에 대해 동일한 작업을 수행합니다.
- $foo
= pack(- "U4", 0x24b6, 0x24b7, 0x24b8, 0x24b9);
- 다음은 비슷한 작업을 수행하며 일부 빈 공간을 추가합니다. 🎜>
- $out = pack(
- " CCxxCC", 65, 66, 67, 68); # $out은 "AB와 같습니다.
- $data = "010000020007";
- 풀기 ("Sint1/Cchar1/Sint2/Cchar2",$data)
-
- ## 배열('int1'=>1, 'char1'=>'0','int2'=>2, 'char2'=>7)
-
- 마지막 글 처음에 언급된 프로토콜에 대해 pack/unpack을 사용하는 예제 프로그램 코드는 다음과 같습니다.
- pack(
'SCSa32a32'- ,0x0040, 0x00 , 0x0006, $username, $passwd ) ,$lastmessage
)
-
학습 자료: http://blog. .net/jojobb3138688/archive/2007/05/07/1598609.aspx위 내용의 출처는 http://blog.sina.com.cn/s/blog_3eba8f1c0100nq9r.html입니다. 이제 괜찮습니다. 다 사용했습니다. 헤이헤이기타 참고 자료가 있습니다:http://bbs.phpchina.com/thread-104492-1-1.htmlhttp://hi.baidu.com/chinetman/item/ f78a71d847e7d638e2108fda
위 내용은 관련 내용을 포함하여 php pack() 함수에 대한 자세한 설명과 예제를 소개하고 있어 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.