ホームページ バックエンド開発 PHPチュートリアル バイナリ ストリーム インターフェイスの解析アプリケーション例 Pack、unpack、ord 関数の使用法_PHP チュートリアル

バイナリ ストリーム インターフェイスの解析アプリケーション例 Pack、unpack、ord 関数の使用法_PHP チュートリアル

Jul 21, 2016 pm 03:05 PM
ord p バイナリ 説明書 関数 応用 インターフェース 流れ 解析する

仕事では、バイナリバイト処理におけるパック、アンパック、オードの威力についても徐々に学びました。 以下に一つずつ紹介していきます。私たちの仕事では、おそらくあまり使用されません。 私の最近の仕事では、通信にバイナリ ストリームを使用する必要があり、インターフェイスは PHP を使用して受信されました。処理するときに、たくさんの情報を調べました。なぜなら、それらは実際にめったに使用されず、仕事でそれらを使用する友人もほとんどいないからです。 また、職場では、pack、unpack、ord がバイナリ バイト処理にいかに強力であるかを徐々に学びました。 以下に一つずつ紹介していきます。
pack 関数の説明: この関数は、データを圧縮して文字列にパックするために使用されます。
構文: pack(format,args+)
パラメータの説明
formatが必要です。データをパッケージ化するときに使用する形式を指定します。
args+ オプション。ラップする 1 つ以上のパラメータを指定します。
文字の説明
a 空白文字列をNULL文字で埋めます
A 空白文字列をSPACE文字(スペース)で埋めます
h 16進数文字列、下位桁が最初
H 16進数文字列、上位桁が最初
c 符号付き文字
C 符号なし文字
s 符号付き short integer (16 桁、コンピューターのビット順序に従って)
S unsigned short integer (16 桁、コンピューターのビット順序に従って)
n unsigned short integer (16 桁、ビッグバイトの順序に従って)
v 符号なし短整数 (16 桁、下位バイト順)
i 符号付き整数 (コンピューターの順序と範囲に従う)
I 符号なし整数 (コンピューターの順序と範囲に従う)
l 符号付き長整数 (32 桁、コンピューターのビット順序に従って)
L 符号なし長整数 (32 桁、コンピューターのビット順序に従って)
N 符号なし短整数 (32 桁、コンピューターのビット順序に従って)、ビッグエンディアン順序)
V unsigned short integer (32 桁、ローエンディアン順)
f 単精度浮動小数点数 (コンピュータの範囲に応じて)
d 倍の正確な浮動小数点数 (コンピュータの範囲に応じて)
x 空ビット
X 1ビット巻き戻す
@ NULL文字を絶対位置に埋め込む
unpack関数の説明: この関数はビット列データを解凍するために使用されます
構文: unpack(format,args+)
パラメータの説明
形式が必要です。データをパッケージ化するときに使用する形式を指定します。
args+ オプション。ラップする 1 つ以上のパラメータを指定します。
パラメータはパックと同じです。
ord 関数の説明: 対応する文字の acill コード値を返す
構文: ord($character);
説明例:

コードをコピー コードは次のとおりです:

//文字
$str=(pack("A*", "中国"));
echo $str,"=",strlen($str),"byte n"; $str);
//H 文字
$str=(pack("H*", "fffe"));
echo $str,"=",strlen($str),"byte n"; $str) ;
//C 文字
$str=(pack("C*", "55","56","57"));
echo $str,"=",strlen($str), "byte n";
getAscill($str);
//i 文字の短整数 32 ビット、4 バイト、64 ビット、8 バイト
$str=("i", "100")); str ,"=",strlen($str),"byte n";
getAscill($str);
//s 文字 short integer 2 バイト
$str=(pack("s", "100") );
echo $str,"=",strlen($str),"byte n";
getAscill($str);
//l 文字長整数 4 バイト
$str=(pack("l ", "100" ));
echo $str,"=",strlen($str),"byte n";
getAscill($str);
//f 文字単精度浮動小数点 4 バイト
$str=("f ", "100"));
echo $str,"=",strlen($str),"byte n";
getAscill($str);
//d 文字 double 精度浮動小数点 8 バイト
$str= (pack("d", "100"));
echo $str,"=",strlen($str),"byte n";
関数 getAscill($str)
$arr=str_split($str);
foreach ($arr as $v)
{
echo $v,"=",ord($v),"n"
}
echo "====== =======rnrn";
}
?>


上記の例を通して、異なる形式で保存された同じ文字列が異なるバイト数を占めることがわかります。 ここでは、文字をさまざまな形式で保存するとストレージ容量を節約できることもわかります。そして暗号化効果は判読できません。 突然、フィールドが 10 ビット長の整数のみの場合に、データベースのフィールド タイプを設計するという問題が頭に浮かびました。これを整数: 256*256*256*256 に設定します。これは、10 個の長さの文字列に設定されている場合は 4 バイトになります。これには 10 バイトが必要です。消化スペース全体が2倍になります。 正しい文字タイプを設定すると、データベースのパフォーマンスを向上させるのに非常に役立ちます。あはは、話が少し逸れてしまいました...
PHPのバイトコード通信処理例の分析
先ほど述べたpackの機能:容量の節約、形式の暗号化
以下はこれら2つの例です。インターフェース開発要件:
パラメータの説明
ユーザー名は20バイト、文字型
パスワードは10バイト、文字型
年齢は1バイト、unsigned char型
生年月日は4バイト、整数型(19800101)
メールアドレスは50 バイト、文字列
各フィールド間で使用: "

http://www.bkjia.com/PHPjc/327691.html
www.bkjia.comtru​​e
http://www.bkjia.com/PHPjc/327691.html

技術記事

仕事では、バイナリ バイト処理におけるパック、アンパック、オードの威力についても徐々に学びました。 以下に一つずつ紹介していきます。私たちの仕事では、おそらくあまり使用されません。 私は最近...





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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

golang 関数で新しい関数を動的に作成するためのヒント golang 関数で新しい関数を動的に作成するためのヒント Apr 25, 2024 pm 02:39 PM

Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の命名におけるパラメーターの順序に関する考慮事項 C++ 関数の命名におけるパラメーターの順序に関する考慮事項 Apr 24, 2024 pm 04:21 PM

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Apr 24, 2024 am 11:33 AM

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

Excel関数の公式の完全なコレクション Excel関数の公式の完全なコレクション May 07, 2024 pm 12:04 PM

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

C++ 関数例外の詳細: カスタマイズされたエラー処理 C++ 関数例外の詳細: カスタマイズされたエラー処理 May 01, 2024 pm 06:39 PM

C++ の例外処理は、特定のエラー メッセージ、コンテキスト情報を提供し、エラーの種類に基づいてカスタム アクションを実行するカスタム例外クラスを通じて強化できます。 std::Exception から継承した例外クラスを定義して、特定のエラー情報を提供します。カスタム例外をスローするには、throw キーワードを使用します。 try-catch ブロックでdynamic_castを使用して、キャッチされた例外をカスタム例外タイプに変換します。実際の場合、open_file 関数は FileNotFoundException 例外をスローします。例外をキャッチして処理すると、より具体的なエラー メッセージが表示されます。

Java でのインターフェイスと抽象クラスの内部クラス実装 Java でのインターフェイスと抽象クラスの内部クラス実装 Apr 30, 2024 pm 02:03 PM

Java では、インターフェイスおよび抽象クラス内で内部クラスを定義できるため、コードの再利用とモジュール化に柔軟性が提供されます。インターフェイスの内部クラスは特定の関数を実装できますが、抽象クラスの内部クラスは一般的な関数を定義でき、サブクラスは具体的な実装を提供します。

Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 Java のデザイン パターンにおけるインターフェイスと抽象クラスの適用 May 01, 2024 pm 06:33 PM

インターフェイスと抽象クラスは、分離と拡張性のためにデザイン パターンで使用されます。インターフェイスはメソッド シグネチャを定義し、抽象クラスは部分的な実装を提供し、サブクラスは未実装のメソッドを実装する必要があります。ストラテジ パターンでは、インターフェイスを使用してアルゴリズムを定義し、抽象クラスまたは具象クラスが実装を提供するため、アルゴリズムを動的に切り替えることができます。オブザーバー パターンでは、インターフェイスを使用してオブザーバーの動作を定義し、抽象クラスまたは具象クラスを使用して通知をサブスクライブおよびパブリッシュします。アダプター パターンでは、インターフェイスを使用して既存のクラスを適応させることができ、互換性のあるインターフェイスを実装できるため、元のコードとの対話が可能になります。

Golang関数がマップパラメータを受け取る際の注意点 Golang関数がマップパラメータを受け取る際の注意点 Jun 04, 2024 am 10:31 AM

Go の関数にマップを渡すと、デフォルトでコピーが作成され、コピーへの変更は元のマップには影響しません。元のマップを変更する必要がある場合は、ポインタを介してそれを渡すことができます。空のマップは技術的には nil ポインターであり、空ではないマップを期待する関数に空のマップを渡すとエラーが発生するため、空のマップは慎重に扱う必要があります。

See all articles