2014-02-19 1 views
0

ASCII 확장 txt 파일이 있는데이 파일을 바이트 배열로 변환해야합니다. 문제는 Null char 및 space가 동일한 0x20 값으로 디코딩된다는 것입니다. 이 두 사례를 어떻게 구분할 수 있습니까? 이 파일은 직렬 로거 하드웨어에 의해 작성되어 직렬 포트에서 교환되는 바이트를 ASCII 확장 txt 파일에 저장합니다.ASCII 8 비트 인코딩 파일의 널 및 공백 문자 디코딩

class Program 
{ 
    static void Main(string[] args) 
    { 
     Encoding enc = Encoding.GetEncoding(1252); 
     byte[] byteArray; 

     string filePath = "C:\\Log.txt"; 
     if (File.Exists(filePath)) 
     { 
      StreamReader sr = new StreamReader(filePath, enc); 
      string fileString = sr.ReadToEnd(); 
      if (fileString.Length > 0) 
      { 
       byteArray = enc.GetBytes(fileString); 
       for (int i = 0; i < fileString.Length; i++) 
       { 
        Console.WriteLine(fileString[i] + byteArray[i].ToString("X2")); 
       } 
      } 
      else 
      { 
       Console.WriteLine("File is empty"); 
      } 
     } 
     else { 
      Console.WriteLine("File " + filePath +" does not exit");    
     } 
     Console.WriteLine("Press any key to stop..."); 
     Console.ReadKey(); 

    } 
} 
+1

문제가 될 수있는 짧지만 완전한 * 프로그램을 제공 할 수 있습니까? (콘솔 앱이 이상적입니다. 프로그램의 바이트를 하드 코딩하는 것이 적절할 것입니다.) –

+0

전체 콘솔 프로그램을 포함하도록 원래 질문을 수정했습니다. –

+0

하지만 여전히 파일을 여는 중입니다. 즉, 해당 파일을 가지고 있지 않으면 파일을 재생할 수 없습니다. 그래서 바이트를 하드 코딩하는 것이 좋습니다. "ASCII 확장"은 단일 인코딩 이름이 아닙니다. ASCII의 8 비트 확장 인 인코딩이 많이 있습니다. 이게 실제로 CP-1252를 사용하는 것이 확실합니까? 또한 파일의 * 실제 * 바이트를 보려면 바이트를 텍스트로 디코딩 한 다음 바이트로 다시 인코딩하는 대신 스트림을 사용하는 것이 좋습니다. –

답변

0

내가 ASCII-확장 txt 파일을 가지고 내가 바이트 배열로 변환해야합니다 다음은 콘솔 응용 프로그램 코드입니다.

텍스트를 전혀 사용하지 마십시오. 당신은 단지 파일 내에서 바이트를 잡고 싶다면, 그건 정말 쉬운 :

byte[] data = File.ReadAllBytes(filePath); 

자신이 바이트에서 얻을 수있는 동일한 인코딩으로 텍스트를 인코딩 한 후 바이트 텍스트에 도착 디코딩, 찾아 모든 시간을, 먼저 텍스트 변환이 정말로 필요한지 여부를 자문해야합니다.

+0

나는이 옵션을 시도했고 같은 결과를 얻었다. (null 문자는 0x20으로 디코딩되었다.) –

+0

@BelkisMorgalo : "디코딩"이 없다. 이 경우 - 0x20 값이 표시되면 파일에있는 값입니다. 유효성을 검사하려면 이진 파일 편집기 (예 : 무료 16 진수 편집기 Neo)를 사용하는 것이 좋습니다. –

+0

로거에서 만든 새 파일로 다시 시도했는데 제대로 작동했습니다. 그것은 내가 다른 유형의 코딩 및 파일의 추가 처리 테스트를 통해 파일을 오류로 수정 한 것 같습니다. 좋은 16 진수 편집기 Neo, 좋은 도구. 시간 내 주셔서 감사합니다. –