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 |
ကျွန်ုပ်တို့သည်အောက်ပါဖွဲ့စည်းပုံ၏အချက်အလက်များကိုထုပ်ပိုးရန်နှင့်ဖြည်ရန်လိုအပ်သည်ဆိုပါစို့။
User ID (4 byte offigned integer)
အသုံးပြုသူအဆင့် (1 byte)
0 နှင့် 1 ကိုကိုယ်စားပြုသည် (boolean တန်ဖိုးများကိုသက်ဝင်စေခြင်းရှိမရှိ
အသုံးပြုသူအမည် (Fixed အရှည် string, 20 bytes)
ကျွန်ုပ်တို့အောင်မြင်လိုသောအရာမှာ -
ဤကွက်လပ်များကို binary string ကိုထုပ်ပိုးရန် Pack () ကို သုံးပါ။
ဤ string မှမူရင်းအချက်အလက်များကိုပြန်လည်ခွဲခြမ်းစိတ်ဖြာရန် Unpack () ကို သုံးပါ။
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 မှဒေတာများကိုတင်ပါ: