လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Pack () နှင့် unpack () bidirectional converter အကောင်အထည်ဖော်ရန်

Pack () နှင့် unpack () bidirectional converter အကောင်အထည်ဖော်ရန်

M66 2025-05-28

PHP, pack () နှင့် ဖြည့်တင်းခြင်း () နှင့်ဖြည့်တင်းခြင်း () တွင် binary data နှင့်လူတို့၏ဖတ်နိုင်သောပုံစံများအကြားပြောင်းလဲလေ့ရှိသည်။ ဖိုင်သိုလှောင်မှု, ကွန်ယက်ထုတ်လွှင့်ခြင်းနှင့်အခြားအခြေအနေများအတွက်သန်တာကျောက်ဆောင်များရှာဖွေခြင်းကိုနားလည်သဘောပေါက်ရန်ရိုးရှင်းသောနှစ်လမ်းသွားဒေတာကို convertterter တစ်ခုဖန်တီးရန်ဤဆောင်းပါးသည်ဤဆောင်းပါးနှစ်ခုကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးကသင့်အားယူပါလိမ့်မည်။

အခြေခံသဘောတရားများ

  • Pack () - သတ်မှတ်ထားသောပုံစံအရတစ်ခုသို့မဟုတ်တစ်ခုထက်ပိုသောတန်ဖိုးများကို binary strings များထဲသို့ထုပ်ပိုးပါ။

  • Unpack () - သတ်မှတ်ထားသောပုံစံဖြင့် Binary String မှတန်ဖိုးကိုထုတ်ပေးသည်။

ဤလုပ်ဆောင်မှုနှစ်ခု၏ပုံစံကုဒ်များသည်ကိန်းဂဏန်းများ, ရေပေါ်အမှတ်အသားများ, ကြိုးများစသည်တို့ကဲ့သို့သောအချက်အလက်အမျိုးအစားများကိုထောက်ပံ့သည်။

ဇာတ်ကောင် format အဓိပ္ပါယ် bytes သိမ်းပိုက်
လက်မှတ်မထိုး char 1 byte
n INFIFTED တိုတောင်းသောကိန်း (Big Endian) 2 bytes
n သက်တမ်းကြာမြင့်စွာ (Big Endian) 4 bytes
တစ်စီး nul ဖြည့်စွက် n bytes

ဇာတ်လမ်း setting: ရိုးရှင်းသောဒေတာဖွဲ့စည်းပုံ

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

  • User ID (4 byte offigned integer)

  • အသုံးပြုသူအဆင့် (1 byte)

  • 0 နှင့် 1 ကိုကိုယ်စားပြုသည် (boolean တန်ဖိုးများကိုသက်ဝင်စေခြင်းရှိမရှိ

  • အသုံးပြုသူအမည် (Fixed အရှည် string, 20 bytes)

ကျွန်ုပ်တို့အောင်မြင်လိုသောအရာမှာ -

  1. ဤကွက်လပ်များကို binary string ကိုထုပ်ပိုးရန် Pack () ကို သုံးပါ။

  2. ဤ string မှမူရင်းအချက်အလက်များကိုပြန်လည်ခွဲခြမ်းစိတ်ဖြာရန် Unpack () ကို သုံးပါ။

တစ် ဦး converter class ကိုရေးပါ

 class DataConverter {
    const FORMAT = 'Nid/Clevel/Cactive/a20username';

    public static function encode($data) {
        return pack(
            self::FORMAT,
            $data['id'],
            $data['level'],
            $data['active'] ? 1 : 0,
            $data['username']
        );
    }

    public static function decode($binary) {
        $result = unpack(self::FORMAT, $binary);
        $result['active'] = $result['active'] === 1;
        $result['username'] = rtrim($result['username'], "\0"); // ရေွှ့ NUL ဖြည့်ခြင်း
        return $result;
    }
}

အသုံးပြုမှုဥပမာ

 $data = [
    'id' => 123456,
    'level' => 5,
    'active' => true,
    'username' => 'm66user'
];

$binary = DataConverter::encode($data);
echo bin2hex($binary) . PHP_EOL;

$parsed = DataConverter::decode($binary);
print_r($parsed);

ရလဒ်ဥပမာ (Hexadecimal ကိုယ်စားပြုမှု):

 0001e24005016d363675736572000000000000000000000000
Array
(
    [id] => 123456
    [level] => 5
    [active] => 1
    [username] => m66user
)

လျှောက်လွှာဇာတ်လမ်းတစ်ပုဒ်တိုးချဲ့ခြင်း

ဤ converter သည်ရိုးရှင်းသော်လည်းပိုမိုရှုပ်ထွေးသောအသုံးပြုမှုအခြေအနေများသို့တိုးချဲ့နိုင်သည်။

  • Socket Communication Data ကိုတည်ဆောက်ခြင်းနှင့်ခွဲခြမ်းစိတ်ဖြာခြင်းကဲ့သို့သောကွန်ယက် protocol packets များကို။

  • serialization နှင့် binary ဖိုင်များ၏ deserialization ။

  • ကျစ်လစ်သိပ်သည်းသောဒေတာသိုလှောင်မှု (ဥပမာ cache, embedded devices များ) ။

ဥပမာအားဖြင့်, သင် encoded ဒေတာကိုဝေးလံခေါင်သီသော interface သို့ပို့နိုင်သည်။

 file_put_contents("https://m66.net/api/upload", $binary);

သို့မဟုတ်ဝေးလံခေါင်ဖျား decoding မှဒေတာများကိုတင်ပါ: