2011-11-27 2 views
2

이진 파일에서 일부 정보를 추출하려고합니다. 모양은 다음과 같습니다 :Regex 바이너리 파일에서 영숫자가 아닌 문자로 문자열 일치

AUTHCODE(here goes 3 bytes, that I don't need)part_that_i_need(here goes a NULL byte).

enter image description here

어떻게 바이트 {11} {00} {38}과 {00} 사이에 영숫자 qszjlbnkmctkkezgd_qyzkyptqigudilzpkp_qgetefvmigwimrihudk의 부분을 개발하였습니다.

는 여기에 지금까지 한 일이다 :

  string ReadFileMF; 
      using (StreamReader reader = new StreamReader(pathCopy)) 
      { 
       ReadFileMF = reader.ReadToEnd(); 
      } 

      ///match the whole string 
      Match passMF = Regex.Match(ReadFileMF, @"(AUTHCODE).+?(www)"); 
      String passMFs = passMF.Value; 

      //convert to array of bytes 
      byte[] bpass = StrToByteArray(passMFs); 

      //replace the 3 bytes after AUTHCODE with spaces 
      bpass[8] = 0x20; 
      bpass[9] = 0x20; 
      bpass[10] = 0x20; 

좋아, 그래서 지금은 그냥 마지막에 널 바이트와 일치해야합니다. 같은 것이 (AUTHCODE).+?(NULL_BYTE)입니다. 어떤 아이디어?

+0

는 길이를 변경할 수 있습니까? 안전하게 문자열로 변환 할 수 있습니까 (정규 표현식). –

+0

예 필요한 값의 길이를 변경할 수 있습니다. 그리고 이미 (AUTHCODE). +? (N) – technology

+0

과 일치하는 문자열로 바뀌 었습니다. "이미 문자열로 바뀌 었습니다."즉,'byte'가 아닌'char's를 건너 뛰고 싶다는 뜻입니다. –

답변

0

이것은 바이트 데이터에 대해 몇 가지 간단한 for-loop 또는 Copy() 액션을 사용하면 가장 쉽습니다. 정확한 사양이 너무 적습니다. Like :

Regex가 필요하거나 필요하면 먼저 문자열로 변환해야합니다. 안전한 내기는 ASCII 인코딩 인 것 같습니다. 다음

string text = Encoding.ASCII.GetString(data); 

및 (안된)

Regex.Match(text, "AUTHCODE.{3}([^\0x00]+)\0x00); 
+0

나는 3 바이트를 amtch 할 필요가 없지만 그것들과 null 바이트 인 – technology

+0

사이의 부분은' \ 0x00] +)'수학에 (처음이자 유일한 그룹) –

+0

감사합니다. 첫 번째 코드로 작업했습니다. – technology

관련 문제