在字串中儲存二進位制資料的方法和要點

2021-07-10 10:28:13 字數 2141 閱讀 2686

問題

你想解析乙個包含著二進位制編碼值的字串,或者想把值編碼為字串。例如,你想以二進位制表示法儲存數值,而不是以ascii字元的序列形式。

方案使用pack()函式把二進位制資料儲存到乙個字串中:

<?php

$packed=pack('s4',1974,106,28225,32725);

//使用unpack()函式從乙個字串中抽取二進位制資料

$nums=unpack('s4',$packed);

print_r($nums);

// 輸出乙個陣列 array( [1] => 1974 [2] => 106 [3] => 28225 [4] => 32725)

?>

討論

傳遞給pack()引數的第乙個引數是乙個格式化字串,用於描述 如何對其他引數進行編碼。其中格式化字串s4表示:

由輸入的資料生成四位無符號的短16位數。對於給定的1974,106,28225和32725作為基於little-endian序列的計算機輸入資料,

會生成8組數字:182,7,106,0,65,110,213,127。

其中每2個數字對應著乙個輸入的資料值,即7*256+182=1974;0*256+106=106;110*256+65=28225;127*256+213=32725.

傳遞給unpack()函式的第乙個引數,也是乙個格式化字串;第二個引數則是要解碼的資料。

在unpack()函式內部,格式化字串以及其數目的後面還可以跟乙個字串,這個新增的字串將作為陣列的乙個鍵。例如:

<?php

$packed=pack('s4',1974,106,28225,32725);

$nums=unpack('s4num',$packed);

print_r($nums);

//輸出array ( [num1] => 1974 [num2] => 106 [num3] => 28225 [num4] => 32725 )

?>

以下是用於pack()和unpack函式的格式化字串

a 無填充的字串

a 空格填充的字串

h 16位字串,以低四位開始

h 16位字串,以高四位開始

c 帶符號的字元

c 不帶符號的字元

s 帶符號的短整型數(always 16 bit, machine byte order)

s 無符號的短整型數 (always 16 bit, machine byte order)

n 無符號的短整型數 (always 16 bit, big endian byte order)

v 無符號的短整型數 (always 16 bit, little endian byte order)

i 帶符號的整數 (machine dependent size and byte order)

i 無符號的整數 (machine dependent size and byte order)

l 帶符號的長整型數 (always 32 bit, machine byte order)

l 無符號的長整型數 (always 32 bit, machine byte order)

n 無符號的長整型數 (always 32 bit, big endian byte order)

v 無符號的長整型數  (always 32 bit, little endian byte order)

q 帶符號的超長整型數 (always 64 bit, machine byte order)

q 無符號的超長整型數 (always 64 bit, machine byte order)

j 無符號的超長整型數 (always 64 bit, big endian byte order)

p 無符號的超長整型數 (always 64 bit, little endian byte order)

f 浮點型數 (大小和表示法與計算機相關)

d 雙精度型數 (大小和表示法與計算機相關)

x 空位元組

x 倒退乙個位元組

z nul-padded string (new in php 5.5)

@ 絕對位置以空值填充

計算二進位制字串

4646598ce4f12f0f484da18acbd83813.png en resource database 11364 1 1226f6e4e21ed6df41356aa6e9e857c0.png en resource database 11366 1 遇到難度較大的題目的解題步驟 1.找...

計算二進位制字串

題目描述 給定乙個字串 s,計算具有相同數量0和1的非空 連續 子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。重複出現的子串要計算它們出現的次數。示例 1 輸入 00110011 輸出 6 解釋 有6個子串具有相同數量的連續1和0 0011 01 1100 10 0011 和 01...

字串與二進位制

單引號字串會被表示成整數值列表。c返回字元 c 的整數編碼。下面這個例子用於解析字元列表表示法,該表示法用於表示乙個任意的有符號的十進位制資料。defmodule parse do def number tail do number digits tail,0 1 enddef number tai...