2017-04-05 4 views
0

私はカスタムバイナリファイル形式をリバースエンジニアリングしています。 UTF-8文字列を表すデータ構造が見つかりました。文字列の長さを保存するヘッダーには1〜2バイト、次に実際の文字列データがあります。UTF-8文字列を格納するために使用されるバイナリ構造を逆にする

╔════════════╦═══════════════╦═══════════════════╗ 
║ first byte ║ optional byte ║ UTF-8 string data ║ 
╚════════════╩═══════════════╩═══════════════════╝ 

ヘッダーの2番目のバイトはオプションで、文字列の長さが128バイトより大きい場合にのみ表示されます。文字列の長さが128バイト以下の場合、その長さをデコードするのは簡単です。しかし、文字列の長さ> 128の場合、文字列の長さを計算できません。だから私は実験を行い、異なる文字列の長さを持つ多くのバイナリファイルを生成し、その結果が下になります。文字列の長さはバイト数です。

╔════╦════╦═══════════════╗ 
║ 01 ║ 02 ║ String length ║ 
╠════╬════╬═══════════════╣ 
║ 7D ║N/A ║   126 ║ 
║ 7E ║N/A ║   127 ║ 
║ 7F ║N/A ║   128 ║ 
║ 80 ║ 01 ║   129 ║ 
║ 81 ║ 01 ║   130 ║ 
║ C7 ║ 01 ║   200 ║ 
║ C8 ║ 01 ║   201 ║ 
║ F9 ║ 01 ║   250 ║ 
║ FE ║ 01 ║   255 ║ 
║ FF ║ 01 ║   256 ║ 
║ 80 ║ 02 ║   257 ║ 
║ 81 ║ 02 ║   258 ║ 
║ 82 ║ 02 ║   259 ║ 
║ F3 ║ 03 ║   500 ║ 
║ F4 ║ 03 ║   501 ║ 
║ F5 ║ 03 ║   502 ║ 
║ F6 ║ 03 ║   503 ║ 
║ 80 ║ 04 ║   513 ║ 
╚════╩════╩═══════════════╝ 

私はそれが代わりにヌルの文字列の長さを保存するために、ヘッダを有する場合、そのパスカル\デルファイは、文字列形式を使用しているどこかで読んで、私の場合と同様に見えるCのように文字列を、終了しました。私の質問は、あなたはこのフォーマットについて考えていますか?文字列の長さが128バイトを超える場合、それをどのようにして計算できますか?

答えて

1

計算できるのは(FirstByte and 0x7F) + 0x80 * SecondByte + 1

+0

ありがとうございます!ところで、それは既知の形式ですか? –

+0

わからない – EugeneK

関連する問題