ホームページ  >  記事  >  バックエンド開発  >  データをこの形式に変換するにはどうすればよいですか?

データをこの形式に変換するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 14:22:45882ブラウズ

これはバイナリのようです。 PHP は文字列または配列をこれに変換するためにどの関数を使用しますか?


ディスカッションへの返信(解決策)

Pack()
逆はunpack()


Pack()
逆はunpack()

なんとなくpackのように見えますが、この関数にはパラメータがたくさんあります, 試してみましたが、実行結果には同様のデータ構造が表示されませんでした。

Pack だけでできるなら、それはおかしいでしょう

上記を補足したい場合は、LZ に聞いてください
Pack() の結果を直接見ていませんね。
Pack() の後の結果はバイトであり、wb モードでファイルに書き込まれ、表示するには 16 進数をサポートするエディターで開く必要があります
さらに、異なるパラメーターは異なる文字列を変換します (この文字列もバイト単位で考慮する必要があります)。これらのパラメータの意味を勉強してください

上記を補足したい場合は LZ に問い合わせてください
Pack() の結果を直接見ていませんよね?
Pack() の後の結果はバイトであり、wb モードでファイルに書き込まれ、表示するには 16 進数をサポートするエディターで開く必要があります
さらに、異なるパラメーターは異なる文字列を変換します (この文字列もバイト単位で考慮する必要があります)。これらのパラメータの意味を調べてください

バイナリに変換された文字列の場合。パラメータに a を使用するのは正しいですか?それとも大文字のA?

文字列はバイナリです
aは指定された長さ以内であることを意味し、足りない部分はnull(0x00)で埋められます
Aは指定された長さ以内であることを意味し、足りない部分はスペース(0x20)で埋められます
長さが指定されていない場合も意味がありません

$s = 'CSDN(www.csdn.net)';for($i=0; $i<strlen($s); $i++) {  printf('%02x ', ord($s{$i}));  if(($i+1)%16 == 0) echo '<br>';}
43 53 44 4e 28 77 77 77 2e 63 73 64 6e 2e 6e 65
74 29

文字列はバイナリです
a は、指定された長さでは不十分であることを意味します部分をnull(0x00)で埋める
Aは指定した長さのうち、足りない部分をスペース(0x20)で埋めるという意味
長さを指定しないと意味がない

$s = 'CSDN(www.csdn.net)';for($i=0; $i<strlen($s); $i++) {  printf('%02x ', ord($s{$i}));  if(($i+1)%16 == 0) echo '<br>';}
43 53 44 4e 28 77 77 77 2e 63 73 64 6e 2e 6e 65
74 29

なぜ長さを指定する必要があるのでしょうか?それがどのようなものであるかを特定しないことに意味はありませんか?

Lao Xu によって書かれた固定長は、文字列 (入力) の長さではなく、フォーマット パラメーターの必要な長さを指します
たとえば、マニュアルの例
例 #1 Pack() の例
$binarydata = Pack("nvc*", 0x1234, 0x5678, 65, 66);
?> 結果のバイナリ文字列は 6 バイトの長さになり、バイト シーケンス 0x12、0x34、0x78、0x56、0x41、0x42 が含まれます。
パラメータ n と v は 16 ビット、c は 8 ビットであるため、次のパラメータは 0x1234 が n パラメータ、0x5678 が v パラメータ、65 が c パラメータであることを示します。* 記号は c パラメータであることを示します。は引き続き使用されるため、c パラメーターに従って 66 も出力されます
つまり、format パラメーターの * 記号は、後続の可変長の入力に使用できます

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。