2016-04-03 12 views
1

なぜpack()は、符号付きおよび符号なしフォーマットコードで同じ結果をもたらしますか?機能パックとして()符号付きおよび符号なしの値との間の区別のみ は、(機能アンパックに影響を与えることPHPパックの機能

http://php.net/manual/en/function.pack.php

注)は、符号付きおよび符号なしフォーマットコードの同じ 結果を与えます。

+3

このように実装されているので、 –

+0

@AlexBlexなぜですか?私はそれをAPIに送るために符号付き整数をパックしたいのですが、それは重要ですか?多分APIサーバがそれを間違って解凍するかもしれません。 – Cooper

答えて

2

パックされた整数は32/64ビットのdword/qwordであり、符号付き整数かどうかの情報は保持されません。最上位ビットの解釈はアンパック段階のみになる。

APIサーバーのデータ形式については、ドキュメントを確認することを強くおすすめします。歌のビットの解釈とは別に、整数の長さと、byte orderと言及する必要があります。

また、PHPは内部マシン依存サイズ(長C型)の符号付き値として整数値を格納すること

注意注....の

部分を読んでくださいあなたが参照したページ。

バイナリデータを処理することは、正しい梱包を確保することはお客様の責任です。私。 APIサーバーが署名付き32intを必要とする場合は、送信する整数が2,147,483,647(0x7FFF FFFF)以下であることを確認する必要があります。そうでない場合は、負の数値として解釈されます。 APIサーバーが符号なしint32を予期している場合は、どれくらい難しくてもは符号付き整数をパックする必要があります。結果は正の数でアンパックされます。