0

次の形式の16バイトがあります

short int, short int, short int, short int, unsigned int, short int, short int

を使用するunpack('SSSSLS', $data)と、必要なものが返されませんでした。PHP は、次のように、配列のキー名としてフォーマット文字列を使用しようとします。

array(1) {
  ["SSSLS"]=>
  int(600)
}

数字のインデックスだけで6つの数字の配列を生成する方法はありますか?

4

1 に答える 1

3

これは unpack の仕組みではありません。これは正しいコードです:

  array_values(unpack('S4l1/Ll2/S2l3', $data));

基本的に系列を/s で分割し、1 より大きい場合は出現回数を指定する必要があります。また、php が配列キーを上書きしてしまうため、名前も必要です。

アンパックの結果は、実際には次のようになります。

Array
(
    [l11] => short 1
    [l12] => short 2
    [l13] => short 3
    [l14] => short 4
    [l2] => int 
    [l31] => short 5
    [l32] => short 6
)

名前を使用しなかった場合は、次のようになります。

Array
(
    [1] => short 5
    [2] => short 6
    [3] => short 3
    [4] => short 4
)
于 2013-05-28T09:59:45.270 に答える