2017-04-05 7 views
0

사용자 지정 이진 파일 형식을 리버스 엔지니어링합니다. UTF-8 문자열을 나타내는 데이터 구조를 찾았습니다. 문자열 길이를 저장하기 위해 헤더에 1 ~ 2 바이트가 있고 그 다음 실제 문자열 데이터가 있습니다.UTF-8 문자열을 저장하는 데 사용되는 되돌리기 이진 구조

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

헤더의 두 번째 바이트는 선택 사항이며 문자열 길이가 128 바이트보다 클 경우에만 해당됩니다. 문자열 길이가 128 바이트보다 작거나 같으면 길이를 쉽게 해석 할 수 있습니다. 그러나 문자열 길이가 128보다 클 경우 문자열 길이를 계산할 수 없습니다. 그래서 나는 실험을했고 다른 길이의 문자열을 가진 많은 바이너리 파일을 생성했다. 그 결과는 다음과 같다. 문자열 길이는 바이트입니다. 이 널 (null)이 제 경우 유사 C에서와 같은 문자열을, 종료 대신 문자열 길이를 저장하는 헤더가 어디 선가 파스칼이 읽을

╔════╦════╦═══════════════╗ 
║ 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 ║ 
╚════╩════╩═══════════════╝ 

는 \ 델파이 문자열 형식을 사용하고 있습니다. 제 질문은이 형식에 대한 아이디어가 있습니까? 길이가 128 바이트보다 클 때 어떻게 문자열 길이를 계산할 수 있습니까?

답변

1

다음과 같이 계산할 수 있습니다. (FirstByte and 0x7F) + 0x80 * SecondByte + 1

+0

감사합니다. BTW는 알려진 형식입니까? –

+0

내가 아는 바가 없다. – EugeneK