လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Pack အတွက်လက်တွေ့ကျသောအချက်များ (C * ") နှင့် Array ထုပ်ပိုးခြင်း

Pack အတွက်လက်တွေ့ကျသောအချက်များ (C * ") နှင့် Array ထုပ်ပိုးခြင်း

M66 2025-05-29

PHP တွင် PHP တွင် Pack () function သည်သတ်မှတ်ထားသောပုံစံဖြင့်ဒေတာများကို binary strings များထဲသို့ထည့်သွင်းနိုင်သည့်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်ပြီးဒေတာထုတ်လွှင့်ခြင်း, ဖိုင်ရေးသားခြင်းနှင့်ကွန်ယက် protocol အကောင်အထည်ဖော်မှုကဲ့သို့သောဖြစ်ရပ်များတွင်ကျယ်ပြန့်စွာအသုံးပြုသည်။ ဤဆောင်းပါးသည်အစီအစဉ်များကိုထုပ်ပိုးရန်နှင့်၎င်းတို့၏အသုံးပြုမှု, လက်တွေ့ကျသောနည်းစနစ်များနှင့်ဘုံလျှောက်လွှာများကိုခွဲခြမ်းစိတ်ဖြာရန် Pack (C * ") ကို မည်သို့အသုံးပြုရမည်ကိုအဓိကထားသည်။


အထုပ် ("C *") ဆိုတာဘာလဲ။

အထုပ် ၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

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

$ format သည် အချက်အလက်များ၏ထုပ်ပိုးပုံစံကိုသတ်မှတ်သည့်အခါ "C" သည် parameter ကိုလက်မခံနိုင်သောဇာတ်ကောင်များသို့ပြောင်းလဲခြင်းကိုဆိုလိုသည်။ "C *" ဆိုသည်မှာ array တစ်ခုစီအတွက်တစ်ခုတည်းသော byte တစ်ခုတည်းအဖြစ် arete တစ်ခုစီအတွက်သင့်တော်သော uny enyting အတွက်သင့်လျော်သော uny unsigned character format ရှိတန်ဖိုးအမျိုးမျိုးကိုအသုံးပြုရန်ဆိုလိုသည်။

ဥပမာအားဖြင့်:

 $data = [65, 66, 67];
$packed = pack("C*", ...$data);
echo $packed; // ထုတ်လုပ်ခြင်း ABC

ဤကုဒ်တွင် 66 နှင့် ကိုက်ညီ သော ASCII ဇာတ်ကောင် A နှင့်ကိုက်ညီပြီး 67 သည် C နှင့်ကိုက်ညီသည်


Pack ကိုအသုံးပြုနည်း (C * ") ကို array ကိုဘယ်လိုသုံးရမလဲ။

နံပါတ်များကို "C *" မှတဆင့် binary data များထဲသို့ binary data များထဲသို့ပြောင်းရန် ("C *") သို့ပြောင်းရန်အောက်ပါအတိုင်းဖြစ်သည် -

  1. ဂဏန်းတန်ဖိုးများပါ 0 င်သောခင်းကျင်းမှုကိုပြင်ဆင်ပါ။ Array ရှိတန်ဖိုးများသည် 0 နှင့် 255 အကြားဖြစ်သင့်သည်။

  2. parameter ကိုအသုံးပြုပြီး parameter ကို သုံး. (C * ") ကို အသုံးပြု. " C * ") ကို parameter တွေကို parameter များ ( C *" ) ကို pack လုပ်ရန် parameters များကို parray များစွာအဖြစ်ဖြတ်သန်းပါ။

  3. Pack () နံပါတ်တစ်ခုစီကို byte တစ်ခုသို့ပြောင်းလဲပြီး binary string ကိုပြန်ပို့သည်။

နမူနာကုဒ်:

 <?php
$array = [72, 101, 108, 108, 111]; // ကိုက် "Hello"
$binary = pack("C*", ...$array);

echo $binary; // ထုတ်လုပ်ခြင်း: Hello
?>

မှတ်ချက် - Pack () သည် binary string ကိုပြန်ပို့ပေးပြီး ပဲ့တင်သံကို တိုက်ရိုက် သုံး. ထုတ်လွှင့်မည်မဟုတ်ပါ။ ၎င်းကို visual way တစ်ခုဖြင့်ကြည့်လိုပါက Bin2Hex () function ကိုသုံးနိုင်သည်။

 echo bin2hex($binary); // 48656c6c6f

လက်တွေ့ကျသောအကြံပြုချက်များ

1 ။ ခင်းကျင်းအချည်းနှီးဖြစ်သည့်အခါအပြောင်းအလဲနဲ့

အကယ်. Array သည်အချည်းနှီးဖြစ်လျှင်, ခေါ်ဆိုမှု အထုပ် ("C *", ... $ array) အမှားတစ်ခုသတင်းပို့လိမ့်မည်။ ၎င်းကို ဦး စွာစီရင်ရန်အကြံပြုသည် -

 if (!empty($array)) {
    $binary = pack("C*", ...$array);
} else {
    $binary = '';
}

2 ။ အကွာအဝေးထဲက array element တွေကို

Pack ("C *") သည် element ကို 0 ~ 255 ၏ကိန်းဂဏန်းတစ်ခုဖြစ်ရန်လိုအပ်သည်။ မဟုတ်ရင်မမျှော်လင့်ဘဲရလဒ်များပေါ်ပေါက်လာလိမ့်မည်။ သင် scope ကိုကန့်သတ်ရန် array_map ကို သုံးနိုင်သည်။

 $array = array_map(function($v) {
    return $v & 0xFF; // အနိမ့်ဆုံးကိုသာသိမ်းထားပါ8မြင်းဇက်ကြိုး
}, $array);

3 ။ ကွန်ယက်ဒေတာ packets များနှင့်အတူပေါင်းစပ်

ထုပ်ပိုးထားသောအချက်အလက်များကို Custom network protocols များတွင်မကြာခဏအသုံးပြုလေ့ရှိပြီးကိန်းဂဏန်းများကို byte stream များသို့ပြောင်းလဲပြီးဝေးလံသောဆာဗာများသို့ပို့နိုင်သည်။

ဥပမာ -

 $data = [1, 2, 3, 4];
$packet = pack("C*", ...$data);
$socket = stream_socket_client("tcp://m66.net:1234");
fwrite($socket, $packet);
fclose($socket);

ပုံမှန် application အခြေအနေများ

1 ။ Binary file ရေးသားခြင်း

တစ်ခါတစ်ရံရုပ်ပုံခေါင်းစဉ်သတင်းအချက်အလက်, အသံနှင့်ဗွီဒီယိုဖိုင်များစသည့် binary format များကိုရေးရန်လိုအပ်သည်။

 $header = [0x89, 0x50, 0x4E, 0x47]; // PNGဖိုင်လက်မှတ်
file_put_contents('file.png', pack("C*", ...$header));

2 ။ ကွန်ယက် protocol data encoding

ထုံးစံ protocol တစ်ခုသည်ကွက်လပ်များစွာပို့သောအခါနံပါတ်များကို byte streams သို့ပြောင်းရန်အလွန်များသောအားဖြင့်ဖြစ်သည်။

3 ။ string ကိုနှင့် byte ခင်းကျင်းပြောင်းလဲ

Pack (C * ") သည် byte Array ကိုကြိုးများအဖြစ်ပြောင်းလဲနိုင်သည်


အကျဉ်းချုပ်

  • Pack (C * ") ကို binary format ရှိ binary strings များထဲသို့ထည့်သွင်းရန်ကိန်းဂဏန်းများကိုထည့်သွင်းရန်အသုံးပြုသည်။

  • Array Element သည် 0 နှင့် 255 ကြားရှိရမည်။ အချည်းနှီးသောခင်းကျင်းမှုကိုပထမ ဦး စွာစစ်ဆေးသင့်သည်။

  • ကွန်ယက်ထုတ်လွှင့်ခြင်း, ဖိုင်အရေးအသားနှင့် protocol development ဖွံ့ဖြိုးတိုးတက်မှုစသည့်အခြေအနေအမျိုးမျိုးအတွက်သင့်တော်သည်။

  • ၎င်းသည်နှစ်လမ်းသွားပြောင်းလဲခြင်းကိုအောင်မြင်ရန် (C * ") ကို အသုံးပြုသည်။

အထုပ် (C * ") ကို အသုံးပြုခြင်းအားဖြင့်သင်သည် Binary Data ကိုထိရောက်စွာလုပ်ဆောင်နိုင်ပြီး PHP ကိုအဆင့်နိမ့်ဒေတာအပြန်အလှန်အားဖြင့်ပိုမိုအစွမ်းထက်အောင်ပြုလုပ်နိုင်သည်။