PHP တွင် PHP တွင် Pack () function သည်ဒေတာများကို binary string များထဲသို့ပြောင်းလဲရန်အလွန်အသုံးဝင်သောကိရိယာတစ်ခုဖြစ်သည်။ သို့သော် developer များစွာသည်တူညီသော ထုပ်ပိုးခြင်း ( 0 င်းဒိုး, Linux နှင့် MacOs ကဲ့သို့သောနေရာအမျိုးမျိုးကိုအသုံးပြုခြင်းသည်ကွဲပြားသောပလက်ဖောင်းများပေါ်တွင် (ဥပမာ Windows, Linux နှင့် Macos) တွင်အသုံးပြုသော function ကို အသုံးပြု. တစ်ခါတစ်ရံ binary data packaged သည်အတူတူပင်ဖြစ်သည်။ ဒါဘာကြောင့်လဲ ဤဆောင်းပါးသည်နောက်ခံယန္တရားများ, ပလက်ဖောင်းကွဲပြားမှုနှင့်ဖြေရှင်းနည်းများကိုရှုထောင့်ရှုထောင့်များမှကြည့်ရှုရန်ဤဆောင်းပါးကိုလေ့လာလိမ့်မည်။
Pack () function () function ကို binary strings များနှင့်တစ်ခုထက်ပိုသော binary strings များထဲသို့တစ်ခုသို့မဟုတ်တစ်ခုထက်ပိုသော binary strings များထဲသို့ထည့်ပါ။ ဘုံပုံစံများ -
C : လက်မှတ်ရေးထိုးထားသောဇာတ်ကောင်များ (1 byte)
C : IFFIFTED ဇာတ်ကောင် (1 byte)
S : တိုတောင်းသောကိန်း (2 bytes) ကိုလက်မှတ်ရေးထိုးခဲ့သည်။
S : INFIFICED မတိုသောကိန်း (2 bytes)
L : ဆိုင်းအင်လုပ်ထားတဲ့ရှည်လျားသောကိန်း (4 bytes)
L : လက်မှတ်မထိုးထားသောရှည်လျားသောကိန်း (4 bytes)
F : တစ်ခုတည်းသောတိကျသောရေပေါ်အမှတ်နံပါတ် (4 bytes)
D : နှစ်ဆတိကျသောရေပေါ်အမှတ်နံပါတ် (8 bytes)
ဥပမာအားဖြင့်:
$data = pack("Nn", 0x12345678, 0x1234);
echo bin2hex($data);
ဤကုဒ်သည် Network Enterianness (Big-endian) တွင်ကိန်းဂဏန်းများကိုတပ်ဆင်ထားပြီးရလဒ်များသည်မည်သည့်ပလက်ဖောင်းတွင်မဆိုတသမတ်တည်းရှိသင့်သည်။
ခြားနားချက်မှာအဓိကအားဖြင့် patform byte အမိန့်နှင့်ဒေတာအမျိုးအစားအရွယ်အစားပေါ် မူတည်. သင်္ကေတများ () တွင်သင်္ကေတများရှိသည်။
S နှင့် S : Byte အမိန့်နှင့်အရွယ်အစားသည်ပလက်ဖောင်းပေါ် မူတည်. (များသောအားဖြင့် 2 bytes များနှင့်ကွဲပြားသော်လည်း) ပေါ်တွင်မူတည်သည်။
L နှင့် L သည် "Long Integer" နှင့်ကိုက်ညီပြီး၎င်းတို့၏အရွယ်အစားနှင့် endianness သည်များသောအားဖြင့် 4 bytes 4 ခုဖြစ်သော်လည်းအချို့ပလက်ဖောင်းများသည် 8 bytes ဖြစ်နိုင်သည်။
ထို့အပြင် Endian Order ၏ခေတ်ရေစီးကြောင်းနှစ်ခုရှိသည်။
Big-Endian : အမြင့်ဆုံး bytes များကိုအနိမ့်အနိမ့်အမှာစကားဖြင့်သိမ်းဆည်းထားသည်
Little-endian : အနိမ့် bytes ကိုအနိမ့်အနိမ့်၌သိုလှောင်ထားပါသည်
မတူညီသောပလက်ဖောင်းရှိ CPU များသည်ကွဲပြားသော endianness ကိုအသုံးပြုသည်။
ပလက်ဖောင်း / ဗိသုကာ | အမိန့် |
---|---|
0 င်းဒိုး (x86 / x64) | နည်းနည်း endian |
Linux (x86 / x64) | နည်းနည်း endian |
MacOS (Intel) | နည်းနည်း endian |
MacOS (လက်မောင်း) | နည်းနည်း endian |
တချို့ embedded ပလက်ဖောင်းအချို့ | ဖြစ်ကောင်း Big-endian |
S နှင့် L သည် Pack () တွင်ထိုစက်၏ဇာတိ endianness ပေါ်တွင်မူတည်သည်။ ထို့ကြောင့်တူညီသောကုဒ်နံပါတ်များသည်ကွဲပြားခြားနားသောဗိသုကာစနစ်များအောက်တွင်ကွဲပြားခြားနားလိမ့်မည်။
<?php
// တိုတောင်းတဲ့ကိန်းဂဏန်းထုပ်ပိုး 0x1234
$data = pack("s", 0x1234);
echo bin2hex($data);
?>
သေးငယ်တဲ့ endian ပလက်ဖောင်းတွေမှာ (ဥပမာ x86 Windows / Linux) output ကိုဖြစ်လိမ့်မည်: 3412
ကြီးမားသောပလက်ဖောင်းပေါ်မှ output ကိုရလဒ်မှာ - 1234
ဤသည် s ပလက်ဖောင်း endianness အပေါ်မူတည်သောကြောင့်ဖြစ်သည်။
pack ၏ output ကို () ၏ output ကို () သည်ပလက်ဖောင်းများ၌တသမတ်တည်းဖြစ်ကြောင်းသေချာစေရန်အတွက်၎င်းကိုအကြံပြုသည်။
byte အမိန့်ကိုသတ်မှတ်ရန်အတွက် format ္ဌစထသင့်
PHP သည် Network byte အမိန့်ပုံစံကိုထောက်ပံ့ပေးသည်။
N : IFFIGNED တိုတောင်းသောကိန်းတို (16 bits), Network Enterianness (Big Endian)
n : လက်မှတ်မထိုးထားသောရှည်လျားသောကိန်းဂဏန်းများ (32 bits), Network Enterianness (Big Endian)
ဇာတိ endianness ပေါ် မူတည်. S နှင့် L ကို အသုံးပြုခြင်း ကိုရှောင်ကြဉ်ပါ ။
byte အမိန့်ပြောင်းလဲခြင်းစိတ်ကြိုက်
အကယ်. သင်သည်ဇာတိ endian format ကိုအသုံးပြုရမည်ဆိုပါစို့။ Pack () ကို ပထမဆုံးအကြိမ်သုံးနိုင်သည်။ ထို့နောက် ende untack () နှင့် strrev () နှင့် strrev () ကိုအသုံးပြုခြင်းကိုကိုယ်တိုင်ပြောင်းလဲနိုင်သည်။
အဓိပ္ပါယ်ဒေတာအရွယ်အစား
အကယ်. ဒေတာအရွယ်အစားသည်မသေချာပါက S နှင့် L ကို အသုံးပြုခြင်းမဟုတ်ပါ, သို့သော် S နှင့် L (unsigned) ကို သုံး. ၎င်းကိုကွန်ယက် endianness ဖြင့်အသုံးပြုသည်။
<?php
// Cross-Platform ရှေ့ဖွဲ့မှုရှိစေရန် Network Enterianness ကိုသုံးပါ
$short = 0x1234;
$long = 0x12345678;
// packလက်မှတ်မထိုးသည့်တိုတောင်းသောကိန်းနှင့်ပေါင်းစည်းထားသောရှည်လျားသောကိန်း,အားလုံးကွန်ယက် byte အမိန့်(Big Endian)
$data = pack("nN", $short, $long);
// hexadecimal string ကိုပုံနှိပ်ပါ
echo bin2hex($data);
?>
Windows, Linux (သို့) MACOS တို့တွင်အလုပ်လုပ်သည်ဖြစ်စေထုတ်လွှင့်မှုမှာ -
123412345678
အချို့သော packratters () formatratters () သည်ပလက်ဖောင်း endianness နှင့် data size ပေါ်တွင်မူတည်သည်။
အများအားဖြင့်အသုံးပြုသောပုံစံများ , s , l နှင့် ဌ ကွဲပြားခြားနားသောစနစ်များတွင်ကွဲပြားခြားနားလုပ်ဆောင်နိုင်ပါသည်။
network byte အမိန့်ကိုအသုံးပြုခြင်း N နှင့် n သည် platform platform ရှေ့မျက်နှာစာကိုသေချာစေနိုင်သည်။
Platform byte အမိန့်နှင့်ဒေတာအမျိုးအစားအရွယ်အစားကိုနားလည်ခြင်းသည် Cross-platform binary data data အမှားများကိုရှောင်ရှားရန်သော့ချက်ဖြစ်သည်။
ဤအသေးစိတ်အချက်အလက်များကိုနားလည်ခြင်းသည်သင် binary data များ၏ဖွဲ့စည်းပုံကိုပိုမိုကောင်းမွန်စွာထိန်းချုပ်နိုင်ပြီးမတူညီသောအစီအစဉ်များတွင်လိုက်ဖက်တဲ့ပြ issues နာများကိုရှောင်ကြဉ်ပါလိမ့်မည်။