PHP, POSP () နှင့်ဖြည်ချခြင်း () functack () functack () functions များတွင် binary data များပြုလုပ်ရန်အသုံးပြုသည်။ Bytes ကိုတိကျသောထိန်းချုပ်မှုလိုအပ်သည့်ကွန်ယက်ဆက်သွယ်ရေး, စာဖတ်ခြင်း, စာဝှက်ခြင်း, ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်နှစ်ခု၏အသုံးပြုမှုကိုအသေးစိတ်ရှင်းပြပြီး binary data ကိုပိုမိုထိရောက်စွာလုပ်ဆောင်ရန်ကူညီရန်အပြည့်အဝ format code code နှိုင်းယှဉ်ခြင်းဇယားကိုပူးတွဲတင်ပြပါမည်။
Pack () : Binary String သို့ Package Data ။
Unpack () - PHP Array သို့ Binary string ကိုဖြုတ်ပါ။
နှစ် ဦး စလုံးသည်ဒေတာ၏ဖွဲ့စည်းပုံကိုသတ်မှတ်ရန် format codes များကိုအသုံးပြုသည်။
$data = pack("C*", 72, 101, 108, 108, 111); // သေတမ်းစာ ASCII code ကို string ကိုပြောင်းပါ "Hello"
echo $data; // ထုတ်လုပ်ခြင်း: Hello
သဒ္ဒါ:
string pack(string $format, mixed $values...)
$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)
ပုံစံကုဒ် | ဥပမာပြပါ | 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 | ဘာမှျ |
@ | အကြွင်းမဲ့အာဏာအနေအထားကိုသတ်မှတ်ပါ | ပေြာင်းလဲတတ်သော | ဘာမှျ |
$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 = file_get_contents("https://m66.net/example/file.bin");
$header = unpack("a4signature/Nsize", $binary);
print_r($header);
ဥပမာကုဒ်နံပါတ်ကိုပမာဏဖြင့်ပြုပြင်နိုင်သည်။
C4 : 4 ခုကိုကိုယ်စားပြုသည်
A10 : အက်ခရာ 10 လုံးကိုကိုယ်စားပြုသောနေရာများနှင့်အတူ string string ကို
@ 8 : 8th byte အနေအထားသို့ခုန်ပါ
တတ်နိုင်သမျှ ဖတ်ရန် သင်လည်းအသုံးပြုနိုင်သည်။
$data = unpack("C*", "Hello"); // bytes အားလုံးကိုဖတ်ပါ
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 သည်ပိုမိုအဆင်ပြေသည်အတွက်အကြံပြုသည်။