バイナリ データの文字列操作
ここで、実際に送信され、パラメータ化されるべいビジネス データは、 "Peter" バイナリデータとは = 0x50 65 74 65 72 ですが、ここでは機能しません。 "\h0000104F000000" + sName + "\hFFFF" は期待通りの結果にはなりません。問題は、この文字列中の 0 ( 0x00 ) バイトによって起こされます。 Silk Performer (C 言語のような) では、0 バイトは文字列の終端として使用されるためです。よって、文字列中の最初の 0 バイトのあとのすべてのバイトがこのような文字列結合の実行中に無視されます。
0 バイトを含む可能性のあるバイナリ データの操作には、関数 SetMem を使用するべきです。以下で詳細を示す関数ライブラリを使用して、上記のリクエストは次の行に分割できます。
関数ライブラリは、インクルード ファイル ( *.bdh ) を使ってインクルードします。リクエスト データとリクエスト データ長に対して 2 つのグローバル変数を使用します。関数 AppendRequestData は、リクエスト バッファに文字列を追加します (0 バイトを含むことができる)バイナリデータとは 、そして SendTcpipRequest は、開いている TCP 接続を使用してリクエスト データを送信します。
インクルード ファイルの内容は、以下に示すように 3 つの関数で構成されています。
レスポンス データの検索
レスポンス データに 0 バイトが含まれているとき、文字列を検索することが困難になります。それは、 StrSearch および StrSearchDelimited 関数が、対象の文字列を最初の 0 バイトが見つかるまでしか検索を行わないためです。 0 バイトは文字列の終端として解釈されてしまいます。
Silk Performer では、関数 BinSearch を提供しており、文字列に対して StrSearch が行うのと同じようにバイナリ データに対して機能します。次のようにして、レスポンス データの文字列 (または、バイナリ データのシーケンス) を検索できます。
StrSearchDelimited 関数と同等なバイナリ版の関数はありません。.文字列の検索のみを行いたい場合 (0 バイトを含むバイナリ データとは対照的に)、回避策は、レスポンス データからすべての 0 バイトをマッピングによって (たとえば、 0xFF バイナリデータとは バイトに) 最初に削除する関数を導入することです。
このような関数の単純なバージョンを以下に示します。 sLeftVal, sRightVal および検索する文字列が文字列である場合にのみ機能します (つまり、0 バイトを含まない)。
バイナリエディタの使い方や見方(「アドレス」や「テキスト」とは?)
(図132)
●③Stirlingを開く
↓
●④バイナリデータを開く
●その他:編集方法
<目次> (1) APIの難しい部分を吸収し、手軽に検証するためのツール(Postman)をご紹介 (1-1) Postmanの概要 (1-2) Postmanの導入手順 (1-3 …
<目次> (1) 画面設計の項目一覧の書き方とサンプルのご紹介 (1-1) バイナリデータとは 項目一覧とは? (1-2) バイナリデータとは 項目一覧の書き方は? (1-3) 項目一覧のサンプル (1) 画面設計の項目 …
<目次> (1) ValgrindのIndirectly Lostの意味や実際のサンプルをご紹介 (1-1) Valgrindの「Indirectly Lost」はどんな状況? (1 …
<目次> (1) リトルエンディアンとビッグエンディアンの違いや概要 (1-1) 「リトルエンディアン」と「ビッグエンディアン」とは? (1-2) どのようなシーンで利用される? ( …
<目次> (1) エクスプローラーの検索が遅い際の対処方法 (1-1) Everythingとは? (1-2) Everythingの導入手順 (1) エクスプローラーの検索が遅い際 …
コメント