လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP's Pack () function () function ကိုအသုံးပြုနည်း။ ပြီးပြည့်စုံသောနှိုင်းယှဉ်ဇယား၏စာရင်း

PHP's Pack () function () function ကိုအသုံးပြုနည်း။ ပြီးပြည့်စုံသောနှိုင်းယှဉ်ဇယား၏စာရင်း

M66 2025-05-26

PHP, POSP () နှင့်ဖြည်ချခြင်း () functack () functack () functions များတွင် binary data များပြုလုပ်ရန်အသုံးပြုသည်။ Bytes ကိုတိကျသောထိန်းချုပ်မှုလိုအပ်သည့်ကွန်ယက်ဆက်သွယ်ရေး, စာဖတ်ခြင်း, စာဝှက်ခြင်း, ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်နှစ်ခု၏အသုံးပြုမှုကိုအသေးစိတ်ရှင်းပြပြီး binary data ကိုပိုမိုထိရောက်စွာလုပ်ဆောင်ရန်ကူညီရန်အပြည့်အဝ format code code နှိုင်းယှဉ်ခြင်းဇယားကိုပူးတွဲတင်ပြပါမည်။

1 ။ ထုပ်ပိုးခြင်း () နှင့် ဖြည် () ?

  • Pack () : Binary String သို့ Package Data ။

  • Unpack () - PHP Array သို့ Binary string ကိုဖြုတ်ပါ။

နှစ် ဦး စလုံးသည်ဒေတာ၏ဖွဲ့စည်းပုံကိုသတ်မှတ်ရန် format codes များကိုအသုံးပြုသည်။

2 ။ Pack () function ကိုအသုံးပြုခြင်း

 $data = pack("C*", 72, 101, 108, 108, 111); // သေတမ်းစာ ASCII code ကို string ကိုပြောင်းပါ "Hello"
echo $data; // ထုတ်လုပ်ခြင်း: Hello

သဒ္ဒါ:

 string pack(string $format, mixed $values...)

3 ။ Unpack () function ကိုအသုံးပြုခြင်း

 $data = "Hello";
$result = unpack("C*", $data);
print_r($result);

ထုတ်လုပ်မှု -

 Array
(
    [1] => 72
    [2] => 101
    [3] => 108
    [4] => 108
    [5] => 111
)

သဒ္ဒါ:

 array unpack(string $format, string $data, int $offset = 0)

4 ။ ဘုံ format ဓာတုကုဒ်နှိုင်းယှဉ်ဇယား

ပုံစံကုဒ် ဥပမာပြပါ byte အရှည် ကြီးမားပြီးသေးငယ်တဲ့အဆုံး
တစ်စီး Nul သည် string ကိုဖြည့်ပါ (Nul ကိုမဖယ်ရှားပါ) အရှည်သတ်မှတ်ပါ ဘာမှျ
တစ်စီး နေရာများဖြည့်စွက်ထားသော strings (အမြီးနေရာများဖယ်ရှားပစ်လိမ့်မည်) အရှည်သတ်မှတ်ပါ ဘာမှျ
ဆုတောင်းပါ hexadecimal string, ဇာတ်ကောင်တစ်ခုစီသည် 4 bits ကိုကိုယ်စားပြုသည် တိုင်းနှစ်ခုဂဏန်း = 1 byte ဘာမှျ
ဆုတောင်းပါ caps hexadecimal, ဇာတ်ကောင်တစ်ခုစီသည် 4 -bits ဖော်ပြသည် တိုင်းနှစ်ခုဂဏန်း = 1 byte ဘာမှျ
လက်မှတ်ရေးထိုးခဲ့သည့်အက္ခရာများ (8 bits) 1 byte ဘာမှျ
လက်မှတ်မရသောဇာတ်ကောင်များ (8 bits) 1 byte ဘာမှျ
ပေ တိုတောင်းသောကိန်းတို (16 bits) 2 bytes Host Byte အမိန့်
ပေ လက်မှတ်မထိုးထားသောတိုတောင်းသောကိန်း (16-bit) 2 bytes Host Byte အမိန့်
n လက်မှတ်မထိုးထားသောကိန်းတို (16-bit), ကွန်ယက် byte အမိန့် 2 bytes Big Endian
v လက်မှတ်မထိုးထားသောကိန်းတို (16-bit), နည်းနည်း endian byte အမိန့် 2 bytes little
ကျွန်တော် လက်မှတ်ထိုးကိန်း (စက်နှင့်ဆက်စပ်သော) 4 bytes သို့မဟုတ် 8 bytes Host Byte အမိန့်
ကျွန်တော် လက်မှတ်မထိုးထားသောကိန်း (စက်နှင့်ဆက်စပ်သော) 4 bytes သို့မဟုတ် 8 bytes Host Byte အမိန့်
ြဌ Long Integer (32 bits) ကိုလက်မှတ်ရေးထိုးခဲ့သည် 4 bytes Host Byte အမိန့်
ြဌ လက်မှတ်မထိုးနိုင်သည့်ရှည်လျားသော (32-bit) 4 bytes Host Byte အမိန့်
n လက်မှတ်မထားသောရှည်လျားသောကိန်းဂဏန်း (32 bits), Network byte အမိန့် 4 bytes Big Endian
v လက်မှတ်မထားသောရှည်လျားသောကိန်း (32 bits), Little က endian byte အမိန့် 4 bytes little
ပေ တစ်ခုတည်း - တိကျသောရေပေါ်အမှတ်နံပါတ် (32 bits) 4 bytes Host Byte အမိန့်
ှုှမည်သောဆေး နှစ်ဆတိကျသောရေပေါ်အမှတ်နံပါတ် (64 bits) 8 bytes Host Byte အမိန့်
x bytes ကိုဖြည့်ပါ (skip 1 byte) 1 byte ဘာမှျ
x 1 byte rewind 1 byte ဘာမှျ
@ အကြွင်းမဲ့အာဏာအနေအထားကိုသတ်မှတ်ပါ ပေြာင်းလဲတတ်သော ဘာမှျ

5 ။ လက်တွေ့ကျသောလျှောက်လွှာဥပမာ

ကွန်ယက်ဆက်သွယ်ရေး - အိုင်ပီလိပ်စာပြောင်းလဲခြင်း

 $ip = "192.168.1.1";
$packed = pack("C4", ...explode('.', $ip));
echo bin2hex($packed); // ထုတ်လုပ်ခြင်း c0a80101

$unpacked = unpack("C4", $packed);
echo implode('.', $unpacked); // ထုတ်လုပ်ခြင်း 192.168.1.1

binary protocol parsing (ဥပမာစာဖတ်ခြင်းကိုဖတ်ခြင်း)

 $binary = file_get_contents("https://m66.net/example/file.bin");
$header = unpack("a4signature/Nsize", $binary);
print_r($header);

6 ။ format code အတွက်အရေအတွက်ပြုပြင်မွမ်းမံ

ဥပမာကုဒ်နံပါတ်ကိုပမာဏဖြင့်ပြုပြင်နိုင်သည်။

  • C4 : 4 ခုကိုကိုယ်စားပြုသည်

  • A10 : အက်ခရာ 10 လုံးကိုကိုယ်စားပြုသောနေရာများနှင့်အတူ string string ကို

  • @ 8 : 8th byte အနေအထားသို့ခုန်ပါ

တတ်နိုင်သမျှ ဖတ်ရန် သင်လည်းအသုံးပြုနိုင်သည်။

 $data = unpack("C*", "Hello"); // bytes အားလုံးကိုဖတ်ပါ

7 ။ အကျဉ်းချုပ်

PHP's Pack () နှင့် Unpack () သည်အစွမ်းထက်သော binary processing tools များဖြစ်သည်။ ၎င်း၏ format code နှင့်အသုံးပြုမှုနှင့်ရင်းနှီးကျွမ်းဝင်ခြင်းသည်သင့်အားနောက်ခံအချက်အလက်များကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်ဖြစ်စေသည်။ Parsing protocols များဖြစ်စေသည်ဖြစ်စေ, စနစ်တကျအချက်အလက်များကိုသိုလှောင်ခြင်း,

format codes များစွာရှိသော်လည်းအသုံးပြုသောအမျိုးအစားများ (ဥပမာ C , n , f, f, f , f, f, f , f,) ) ကိုကျွမ်းကျင်ပိုင်နိုင်စွာအသုံးပြုသည်။ Bin2Hex () နှင့် Hex2bin ()) ကိုတီထွင်ရန်အကြံပြုသည်။ Debugging သည်ပိုမိုအဆင်ပြေသည်အတွက်အကြံပြုသည်။