2017-04-05 31 views
0

我是反向工程自定義二進制文件格式。我找到了表示UTF-8字符串的數據結構。頭中有一個或兩個字節用於保存字符串長度,然後是實際的字符串數據。用於存儲UTF-8字符串的反轉二進制結構

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

標頭中的第二個字節是可選的,它只在字符串長度大於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 ║ 
╚════╩════╩═══════════════╝ 

我讀的地方,PASCAL \ Delphi是使用字符串格式,其中有頭保存字符串的長度,而不是空終止像C字符串,它類似於我的情況。我的問題是,你有關於這種格式的想法嗎?如何計算長度大於128個字節的字符串長度。

回答

1

你可以計算得出是(FirstByte and 0x7F) + 0x80 * SecondByte + 1

+0

謝謝!順便說一句,這是一個已知的格式? –

+0

不是我所知道的 – EugeneK