လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ပုံစံအမျိုးမျိုးကိုထောက်ပံ့သောစကြဝ universal ာထုပ်ပိုး function ကို oncaps

ပုံစံအမျိုးမျိုးကိုထောက်ပံ့သောစကြဝ universal ာထုပ်ပိုး function ကို oncaps

M66 2025-05-29

PHP Development တွင်တခါတရံတွင်ကျွန်ုပ်တို့သည်အချက်အလက်များကို binary strings များထဲသို့ကွန်ယက်ထုတ်လွှင့်ခြင်းသို့မဟုတ်ဖိုင်သိုလှောင်မှုအတွက်အဆင်ပြေသည်။ PHP မှပေးသော Pack function သည်ဤလိုအပ်ချက်ကိုရရှိနိုင်ပါသည်။ သို့သော်၎င်းသည်ရှုပ်ထွေးသောပုံစံကြိုးများဖြင့်ဖြတ်သန်းရန်လိုအပ်သည်။ ဤဆောင်းပါးသည် Pack function ကိုမည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးမည်ကိုမိတ်ဆက်ပေးမည်။


1 ။ pack ကို function ကိုမိတ်ဆက်မိတ်ဆက်

အထုပ် လုပ်ဆောင်မှု၏အခြေခံ syntax သည် -

 string pack(string $format, mixed ...$values)
  • $ format သည် C သည် လက်မှတ်မထိုးသည့်ပုံစံကိုကိုယ်စားပြုသည့်ပုံစံကိုသတ်မှတ်သည်။ N သည် 16-bit endian endian integer စသည်ဖြင့်ဖြစ်သည်။

  • $ တန်ဖိုးများသည် သက်ဆိုင်ရာပုံစံဖြင့်အချက်အလက်ဖြစ်သည်။

ဥပမာအားဖြင့်, လက်မှတ်မထိုးထားသောစာလုံးနှစ်စောင်နှင့် 16-bit big-endian integer နှစ်ခုကိုထုပ်ပိုးထားသည်။

 $data = pack('CCn', 0x01, 0x02, 0x1234);

2 ။ အထွေထွေထုပ်ပိုးလုပ်ဆောင်ချက်များကိုဒီဇိုင်းဆွဲခြင်းအတွက်စိတ်ကူးများ

ကျွန်ုပ်တို့ encapsatate လုပ်ချင်သော function ကို:

  • တန်ဖိုးများကို string နှင့်သက်ဆိုင်သောတန်ဖိုးများကိုလက်ခံသည်။

  • format string အရသိရသည်တန်ဖိုးများကိုအလိုအလျှောက် packet ကိုအလိုအလျောက် package ။

  • ဘုံ format အမျိုးအစားများကိုထောက်ပံ့ခြင်းနှင့်ချဲ့ထွင်ရန်အဆင်ပြေသည်။

  • မကိုက်ညီသော parameters များနှင့်ပုံစံများကိုကိုင်တွယ်သောအမှားများကိုကိုင်တွယ်ပါ။

ဥပမာ function ကိုလက်မှတ်

 function universalPack(string $format, array $values): string

ကုဒ်နမူနာများကိုအကောင်အထည်ဖော်ပါ

အောက်ဖော်ပြပါသည်အခြေခံအကောင်အထည်ဖော်မှု သည် အခြေခံ အကောင်အထည်ဖော်မှု ဖြစ်သည်

 function universalPack(string $format, array $values): string {
    $result = '';
    $formatLength = strlen($format);
    $valueIndex = 0;

    for ($i = 0; $i < $formatLength; $i++) {
        $char = $format[$i];
        $repeat = 1;

        // မိတ္တူပွားများရှိရှိမရှိ detect,ကဲ့သို့a4、C2စောင့်
        if (isset($format[$i + 1]) && ctype_digit($format[$i + 1])) {
            $repeat = (int)$format[$i + 1];
            $i++;
        }

        for ($r = 0; $r < $repeat; $r++) {
            if (!isset($values[$valueIndex])) {
                throw new InvalidArgumentException("တန်ဖိုးအရေအတွက်သည်ပုံစံနှင့်မကိုက်ညီပါ");
            }
            $value = $values[$valueIndex];
            $valueIndex++;

            switch ($char) {
                case 'C': // လက်မှတ်မထိုးဇာတ်ကောင်
                    $result .= pack('C', $value);
                    break;
                case 'n': // 16bit bit endian byte အမိန့် bit
                    $result .= pack('n', $value);
                    break;
                case 'N': // 32bit bit endian byte အမိန့် bit
                    $result .= pack('N', $value);
                    break;
                case 'a': // NULstring ကိုဖြည့်ပါ,အားဖြင့်အရှည်repeatဆုံးဖြတ်
                    if ($repeat < 1) {
                        throw new InvalidArgumentException("aformat ကိုအရှည်အတွက်သတ်မှတ်ခံရဖို့လိုအပ်ပါတယ်");
                    }
                    $str = str_pad(substr($value, 0, $repeat), $repeat, "\0");
                    $result .= $str;
                    // aအားလုံးချက်ချင်း processing processingrepeat,valueIndexအဘယ်သူမျှမတိုး
                    $valueIndex--;
                    break;
                default:
                    throw new InvalidArgumentException("မထောက်ပံ့ format ကိုဇာတ်ကောင်: $char");
            }
        }
    }

    return $result;
}

IV ။ ဥပမာဥပမာကိုသုံးပါ

သင် data packet တစ်ခုကိုထုပ်လိုပါကဖွဲ့စည်းပုံမှာ -

  • 1 byte command နံပါတ် ( )

  • 2 byte ဒေတာအရှည် ( ) )

  • 4 byte ဒေတာ ID ( n )

  • 10 byte ဒေတာအကြောင်းအရာ (String, A10 )

ခေါ်ဆိုမှုဥပမာ -

 $command = 0x01;
$length = 14;
$dataId = 123456;
$content = "hello";

$packed = universalPack('CnNa10', [$command, $length, $dataId, $content]);
echo bin2hex($packed);

output ကို:

 01000e0001e24068656c6c6f0000000000

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

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

  • Multi-format data packaging ၏ထုပ်ပိုးမှုကိုရိုးရှင်းစေရန် Universal UniversalPaltack function ကို oncapsultate ။

  • သေးငယ်သောပုံစံများကိုပံ့ပိုးပေးခြင်း,

  • အမှန်တကယ်စီမံကိန်းများအနေဖြင့် unpack function ကို peer unpacking function ကိုရရှိရန် unpack function နှင့်ပေါင်းစပ်နိုင်သည်။