လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Custom Data ဖွဲ့စည်းပုံခွဲခြမ်းစိတ်ဖြာမှုကိုအကောင်အထည်ဖော်ရန်ဖြည့်စွက်ခြင်း () နှင့်ထုပ်ပိုးခြင်း () အထုပ် () () pack ကိုပေါင်းစပ်ခြင်း

Custom Data ဖွဲ့စည်းပုံခွဲခြမ်းစိတ်ဖြာမှုကိုအကောင်အထည်ဖော်ရန်ဖြည့်စွက်ခြင်း () နှင့်ထုပ်ပိုးခြင်း () အထုပ် () () pack ကိုပေါင်းစပ်ခြင်း

M66 2025-05-27

PHP တွင် Binary Data, Pack () နှင့် Unpack () လုပ်ဆောင်ချက်များသည်အလွန်လက်တွေ့ကျသောကိရိယာများဖြစ်သည်။ ၎င်းတို့သည်ဒေတာများကိုတိကျသောပုံစံဖြင့် Binary ကြိုးများအဖြစ်ပြောင်းလဲနိုင်သည်။ ၎င်းသည်ထုံးစံအတိုင်းဒေတာအဆောက်အအုံများကို serialization နှင့် deserialization များကိုအကောင်အထည်ဖော်ရန်အတွက်အလွန်အရေးကြီးသည်,

ဤဆောင်းပါးသည် Custom Data ဖွဲ့စည်းပုံများကိုအကောင်အထည်ဖော်ခြင်းနှင့်ပြောင်းလဲခြင်းကိုအကောင်အထည်ဖော်ရန် Pack () နှင့် ဖြည်ချခြင်း () functack () functack () functack များကိုမည်သို့ပေါင်းစပ်ရမည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။


1 ။ Pack () နှင့်ဖြည်ချခြင်း () လုပ်ဆောင်ချက်များကို

  • Pack (arms ... arms ... ) : parameter သည် parameter သည် format string နှင့်အညီ Binary String သို့ arges များ ပါ 0 င်သည်။

  • Unpack (format, format data) - format string ကိုအညီ Associative Array သို့ binary string data ကို ဖြည်ပါ။

format string ကို data အမျိုးအစား, အရှည်နှင့် endianness ကိုသတ်မှတ်ပေးသော format code ဖြင့်ဖွဲ့စည်းထားသည်။ ဥပမာအားဖြင့်:

  • C : IFFIFTED ဇာတ်ကောင် (1 byte)

  • n : လက်မှတ်မထိုးထားသော 16-bit big-endian endian Endian Integer

  • v : လက်မှတ်မထိုးထားသော 32-bit-bit-endian endian integer

  • A : Nul ဖြည့် string ကို

  • A : အာကာသဖြည့် string ကို

အချိန်ပိုများများအတွက်သာလျှင် တရားဝင် PHP စာရွက်စာတမ်းကို ဖတ်ရှုပါ။


2 ။ ထုံးစံဒေတာဖွဲ့စည်းပုံဥပမာတစ်ခုသတ်မှတ်ပါ

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

Field Name ပုံနှိပ်စာ အရှည် (bytes) ဥပမာပြပါ
ပုံနှိပ်စာ one8 1 ဒေတာအမျိုးအစားဖော်ထုတ်ခြင်း
အရှည် irint16 2 နောက်ဆက်တွဲဒေတာအရှည်
မေြာင်း byte စီး အရှည် တိကျသောဒေတာအကြောင်းအရာ

ကျွန်ုပ်တို့၏ရည်မှန်းချက်ပန်းတိုင်များမှာ -

  • PHP အချက်အလက်ဖွဲ့စည်းပုံကိုအထက်ဖော်ပုံစံနှင့်ကိုက်ညီသော binary data ထဲသို့ထည့်ပါ။

  • Binary Data ကိုခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်အမျိုးအစား, အရှည်နှင့် payload fields များကိုထုတ်ယူသည်။


3 ။ အထုပ် () ကို package () ကိုသုံးပါ

 <?php
function packData(int $type, string $payload): string {
    $length = strlen($payload);

    // 'C' - 1byte offigned integer
    // 'n' - 2byte offigned Big Endian ကိန်းဂဏန်း
    // 'a*' - မည်သည့်အရှည် string ကို,NULဖြည့်ခြင်း(这里不需要ဖြည့်ခြင်း)
    return pack('Cn', $type, $length) . $payload;
}

// စမ်းသပ်မှု
$type = 5;
$payload = "Hello, World!";
$binaryData = packData($type, $payload);
echo bin2hex($binaryData);
?>

ဤတွင် Pack ('CN', $ အမျိုးအစား, $ အရှည်) သည် အမျိုးအစား နှင့် အရှည်ကို သီးခြားစီထုပ်ပိုးပြီးမူရင်း string ကို $ payload ကို splice လုပ်ပါ။


4 ။ forse forse forse ခ unpack () ကိုသုံးပါ

ခွဲခြမ်းစိတ်ဖြာစဉ်အတွင်းပထမ ဦး စွာသတ်မှတ်ထားသောအရှည်အပိုင်း၏ အမျိုးအစား နှင့် အရှည်ကို ထုတ်ယူပါ။ ထို့နောက်ကျန်ရှိသော payload ကို အရှည် အတိုင်းကြားဖြတ်။

 <?php
function unpackData(string $binaryData): array {
    // ပထမ ဦး ဆုံးဖြန့်ချိမီ3နေပြည်တော်,type(1ဒရယ်) + length(2ဒရယ်大端)
    $header = unpack('Ctype/nlength', substr($binaryData, 0, 3));

    $type = $header['type'];
    $length = $header['length'];

    // ကျန်ရှိသောယူပါpayloadအချက်များ
    $payload = substr($binaryData, 3, $length);

    return [
        'type' => $type,
        'length' => $length,
        'payload' => $payload,
    ];
}

// စမ်းသပ်မှု
$data = $binaryData; // အထက်မှယူဆpackDataထုတ်လုပ်ခြင်း
$result = unpackData($data);
var_dump($result);
?>

5 ။ ဥပမာဥပမာများနှင့်ဖော်ပြချက်များ

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

 <?php

function packData(int $type, string $payload): string {
    $length = strlen($payload);
    return pack('Cn', $type, $length) . $payload;
}

function unpackData(string $binaryData): array {
    $header = unpack('Ctype/nlength', substr($binaryData, 0, 3));
    $type = $header['type'];
    $length = $header['length'];
    $payload = substr($binaryData, 3, $length);
    return [
        'type' => $type,
        'length' => $length,
        'payload' => $payload,
    ];
}

// အသုံးပြုမှုဥပမာ
$type = 10;
$payload = "PHP pack/unpack သရုပ်ပြ";

$packed = packData($type, $payload);
echo "二进制အချက်များ(hex):" . bin2hex($packed) . "\n";

$unpacked = unpackData($packed);
echo "ခွဲခြမ်းစိတ်ဖြာရလဒ်များ:\n";
print_r($unpacked);

?>

ရလဒ်များအစက်အပြောက်:

 二进制အချက်များ(hex):0a0017... (hexbinary အကြောင်းအရာ encoded)
ခွဲခြမ်းစိတ်ဖြာရလဒ်များ:
Array
(
    [type] => 10
    [length] => 23
    [payload] => PHP pack/unpack သရုပ်ပြ
)

6 ။ အကျဉ်းချုပ်

  • Pack () နှင့် Unpack () သည် Binary Data မျိုးစုံကိုလုပ်ဆောင်ရန်အတွက်အစွမ်းထက်သောကိရိယာများဖြစ်ပြီးအချက်အလက်အမျိုးအစားများနှင့် endian ပြောင်းလဲခြင်းကိုထောက်ပံ့ခြင်း,

  • ထုံးစံအတိုင်းဒေတာအဆောက်အအုံများကိုခွဲခြမ်းစိတ်ဖြာရန်သင်သည် fixed header format ကိုအရင်သတ်မှတ်ပြီး variable အရှည်အကွက်များကိုလုပ်ဆောင်ရန် string operations များကိုသုံးနိုင်သည်။

  • Binary processing နှင့်ပေါင်းစပ်ထားသော PHP သည် Network Protocols, File format parsing နှင့်အခြားအခြေအနေများကိုလည်းအလွယ်တကူကိုင်တွယ်နိုင်သည်။