Binary data များကိုထုတ်ပေးသည့်အခါ PHP သည်အလွန်အစွမ်းထက်သော pack () function ကိုထောက်ပံ့ပေးသောအလွန်အစွမ်းထက်သော pack () function ကိုထောက်ပံ့ပေးသည်။ ဤပုံစံဖြင့် "V" နှင့် "N" သည်အများအားဖြင့်အသုံးပြုသော parametersk နှစ်ခုဖြစ်ပြီး 32-bit integer ကိုအနည်းငယ်သာ endian endian သို့မဟုတ် big-endian formats များအသီးသီးပါ 0 င်သည်။
developer များစွာသည် "v" နှင့် "n" ကို အသုံးပြုသောအခါမေးခွန်းတစ်ခုရှိနိုင်သည်။ ** ဤပုံစံများသည်ပလက်ဖောင်း၏ endianness ပေါ်တွင်မူတည်ပါသလား။ ** အခြားစကားလုံးများဖြင့် PHP ၏ဤရွေးချယ်မှုနှစ်ခုသည် X86 နှင့်လက်မောင်းကဲ့သို့သောမတူညီသောပလက်ဖောင်းများပေါ်တွင်တသမတ်တည်းလုပ်ဆောင်သလား။ ဤဆောင်းပါးသည်ဤမေးခွန်းကိုနက်နက်ရှိုင်းရှိုင်းဖြေဆိုမည်။
တရားဝင်ဆွေးနွေးမှုမတိုင်မီကျွန်ုပ်တို့သည် Entianness သည်မည်သည့်အရာကိုနားလည်ရန်လိုအပ်သည် -
Big-Endian - အမြင့်ဆုံး bytes များကိုအနိမ့်အနိမ့်အနိမ့်အမြင့်များ၌သိမ်းဆည်းထားပြီးအနိမ့် bytes များကိုအမြင့်ဆုံးလိပ်စာများတွင်သိမ်းဆည်းထားသည်။
Little-endian : Low-by byte ကိုအနိမ့်အနိမ့်အမြင့်တွင်သိမ်းဆည်းထားပြီး High-by byte ကိုအမြင့်ဆုံးလိပ်စာတွင်သိမ်းဆည်းထားသည်။
ဥပမာအားဖြင့်, hexadecimal integer 0x12345678 အတွက်
Big-endian format တွင်၎င်းကို 12 34 56 78 တွင်သိမ်းဆည်းထားလိမ့်မည်
endian format အနည်းငယ်တွင်၎င်းကို 78 56 34 12 12 တွင်သိမ်းဆည်းထားလိမ့်မည်
PHP's Pack () function ကို (v "နှင့်" n "တွင်အောက်ပါပုံစံများကိုကိုယ်စားပြုသည်။
"V" - ဒေတာအနည်းငယ်ကို နိဂုံးချုပ် သည့် 32-bit unsigned integer သို့ encodes ။
"N" : Big-endian (Big-endian) ကို 32-bit unsigned integer သို့ဒေတာများကို encode ။
ဥပမာတစ်ခုကိုကြည့်ရအောင်။
$data = pack("V", 0x12345678);
echo bin2hex($data); // ထုတ်လုပ်ခြင်း:78563412
$data = pack("N", 0x12345678);
echo bin2hex($data); // ထုတ်လုပ်ခြင်း:12345678
အထက်တွင်တွေ့မြင်နိုင်သည့်အတိုင်း "V" နှင့် "n" သည် ပစ်မှတ် endianness ကိုရှင်းလင်းစွာဖော်ပြထားသည်။ ဆိုလိုသည်မှာသင်၏ PHP script သည်မည်သည့် Plat ပလက်ဖြင့်ပြုလုပ်ပါစေ (Windows, Linux, X86, X86, X86, ARM) သည်အထွက် endianness သည် format specification နှင့်ကိုက်ညီလိမ့်မည်။
ဒီတော့ဆောင်းပါးခေါင်းစဉ်မှာမေးခွန်းကိုပြန်မေးပါ - အထုပ် () function "v" နှင့် "n" တွင်ပလက်ဖောင်းမှီခိုမှုများရှိပါသလား။
အဖြေမှာ - မဟုတ်ပါ။
PHP's Pack () function ကိုအသုံးပြုသည်မှာအကောင်အထည်ဖော်သည့်အခါ fixed endianness ပြောင်းလဲခြင်းကိုအသုံးပြုသည်။ ၎င်းသည် PHP ၏ဒီဇိုင်းဆုံးဖြတ်ချက်ဖြစ်ပြီး၎င်းသည်၎င်း၏အတွေးအခေါ်နှင့်သက်ဆိုင်သည်။ မည်သည့်စနစ်သို့မဟုတ်ပရိုဆက်ဆာသည်အောက်ပါကုဒ်နံပါတ်ကိုမည်သို့လုပ်ဆောင်ရမည်နည်း။
echo bin2hex(pack("N", 0x12345678));
သင်တို့ရှိသမျှသည် 12345678 ၏တသမတ်တည်း output ကိုရလိမ့်မည်။
Platform protocols သို့မဟုတ် binary files များနှင့်ဆက်ဆံရာတွင်ဤအပြုအမူသည်အထူးအရေးကြီးသည်။ ဥပမာအားဖြင့်, သင်သည် PHP ကို အသုံးပြု. HTTP / 2 frame heard header ကို လုံခြုံစွာသုံးနိုင်သည်။
$length = 0x123456;
$frame_header = pack("N", $length);
file_put_contents("http2_frame.bin", $frame_header);
သို့မဟုတ်သင် binary format format နှင့်သဟဇာတဖြစ်ရန်လိုအပ်သည့်အခါ Windows Programs မှထုတ်လုပ်သောဖိုင်ပုံစံနှင့်အတူအနည်းငယ် endianness ကို သုံး. binary format format ဖိုင်နှင့်သဟဇာတဖြစ်ရန်လိုအပ်သည်။
$version = 0x00010002;
file_put_contents("format_version.bin", pack("V", $version));
သင်၏ကုဒ်သည်အနာဂတ်တွင် Arm Architecture device တစ်ခုတွင် Run သည်ဆိုပါက၎င်းသည် X86 Platform နှင့်ကိုက်ညီသော binary format ကိုထုတ်လုပ်လိမ့်မည်။
PHP Pack () function တွင်သေးငယ်သည့် Endian နှင့် Endian အနေဖြင့်အသေးစားနှင့်အကြီးစွန်းရှိသည့် "V" နှင့် "n" သည် 32-bit လက်မှတ်မထိုးထားသောကိန်းဂဏန်းများကိုကိုယ်စားပြုသည်။
သူတို့၏အပြုအမူသည် လုံးဝပလက်ဖောင်း - အခမဲ့ ဖြစ်သည်, ဆိုလိုသည်မှာမည်သည့်ပလက်ဖောင်းကိုမဆို endian ledrice ရလဒ်ကိုထုတ်ပေးရန်အာမခံထားသည်။
၎င်းသည် Pack () သည် ကွန်ယက်ပရိုတိုကောများ, ဖိုင်ပုံစံများစသည်တို့ကဲ့သို့သော Cross-platform ပလက်ဖောင်းဆိုင်ရာဆိုင်ရာလိုအပ်ချက်များနှင့်အတူ binary data stretures များကိုကိုင်တွယ်ရန်အလွန်သင့်လျော်သည်။
အကယ်. သင်သည် PPP ကိုအသုံးပြုနေပါက M66.net တွင် Binary ID တွင် Binary ID ကိုထည့်သွင်းခြင်းကဲ့သို့သော binary stredge ပေါ်တွင်မူတည်သည်။ ဥပမာအားဖြင့် "N" သို့မဟုတ် "v" ကိုယုံကြည်စိတ်ချစွာဖြင့်အသုံးပြုနိုင်သည်။
၎င်းသည် PHP သည်ထိုကဲ့သို့သောအခြေခံအချက်အလက်များကိုလုပ်ဆောင်သောအခါအထူးသဖြင့်ယုံကြည်စိတ်ချနိုင်သောနှင့်ထိန်းချုပ်နိုင်စွမ်းရှိသည်။