2014-02-19 58 views
0

我有一個ASCII擴展txt文件,我需要將其轉換爲字節數組。 問題是空字符和空格解碼具有相同的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嗎?還要注意,要查看文件中的* actual *字節,最好使用流,而不是將字節解碼爲文本,然後將它們重新編碼爲字節。 –

回答

0

我有一個ASCII擴展的txt文件,我需要將其轉換爲一個字節數組。

然後不要通過文本去。如果你只是想在一個文件中抓取的字節數,這是非常簡單:

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

任何時候,你會發現自己的解碼字節去文本,然後編碼具有相同的編碼的文本得到的字節,你應該問自己,你是否真的需要這個文本轉換。

+0

我也試過這個選項也得到了相同的結果(空字符解碼爲0x20) –

+0

@BelkisMorgalo:沒有「解碼」在這種情況 - 如果你看到的值是0x20,那麼這就是文件中的內容。我建議你使用二進制文件編輯器(例如Free Hex Editor Neo)來驗證。 –

+0

我再次嘗試使用記錄器創建的新文件,並且它正常工作。這似乎是我通過測試不同類型的編碼和文件的進一步處理來錯誤地修改文件。 Free Hex Editor Neo的好工具,謝謝。 謝謝你的時間。 –

相關問題