2013-04-25 114 views
1

我有一個包含一組記錄,我試圖將其轉換並保存爲1和0的一個文本文件。每天我用字符文本文件,以二進制文本文件

Byte [] arr=Encoding.UTF8.GetBytes(recordss) ; 

,並用它寫時間字節作家我仍然有相同的記錄文件沒有區別。

所以我的問題是有一種方法來將字符串轉換爲二進制文件並將其寫入二進制格式的文件。我使用C#的方式

這裏是我到目前爲止的代碼

public static void serialData() 
{ 
    FileStream recFile = new FileStream("Records.txt", FileMode.Open, FileAccess.ReadWrite); //file to be used for records 

    StreamReader recordRead = new StreamReader(recFile); 

    String recordss = recordRead.ReadToEnd();  //Reads Record file 

    recordRead.Close(); 
    recFile.Close(); 

    Byte [] arr=Encoding.UTF8.GetBytes(recordss) ; 

    FileStream file = new FileStream("Temp.txt", FileMode.Create, FileAccess.Write); 
    StreamWriter binfile = new StreamWriter(file); 

    for(int i =0; i < arr.Count();i++) 
     binfile.WriteLine(arr[i]); 

    binfile.Close(); 
    file.Close(); 
} 

回答

1

有一個內置函數可以將整型值轉換爲二進制表示的字符串。嘗試通過此線

binfile.WriteLine(
    Convert.ToString(arr[i], 2) 
); 

Convert.ToString()更換線

binfile.WriteLine(arr[i]); 

將所述輸入轉換爲表示在給定的基礎。在這種情況下,您選擇2作爲二進制表示的基礎。其他常見值爲八進制的8,或十六進制的16

+0

我只是要問,但如何從文件讀取時從此轉換回 – 2013-04-25 11:53:57

+0

@MohamedAbdelfattah看看[這個答案](http://stackoverflow.com/a/9149738/1553481),例如。 – likeitlikeit 2013-04-25 11:57:35

+0

謝謝你最後讓代碼工作..你有一個好日子和一個良好的週末:-) – 2013-04-25 12:11:19

0

你的結果是「字節」格式。總是。根據定義它是數據。您「看到」的方式取決於您用來打開它的軟件。

你想要什麼可能是一個文件,當在文本編輯器中打開'顯示'原始數據源的底層二進制數據:作爲文本。爲此,您必須將文件寫入字符'0'和'1'。因此,最終文件將比原始數據源大很多。

更改此代碼:

for(int i =0; i < arr.Count();i++) 
    binfile.WriteLine(arr[i]); 

進入這個:

foreach (byte b in arr) 
{ 
    binfile.Write((b >> 7 & 1) == 0 ? '0' : '1'); 
    binfile.Write((b >> 6 & 1) == 0 ? '0' : '1'); 
    binfile.Write((b >> 5 & 1) == 0 ? '0' : '1'); 
    binfile.Write((b >> 4 & 1) == 0 ? '0' : '1'); 
    binfile.Write((b >> 3 & 1) == 0 ? '0' : '1'); 
    binfile.Write((b >> 2 & 1) == 0 ? '0' : '1'); 
    binfile.Write((b >> 1 & 1) == 0 ? '0' : '1'); 
    binfile.Write((b & 1) == 0 ? '0' : '1'); 
} 

但它是一種醜陋。更好地使用十六進制文件查看器。

+0

謝謝,但我只有1的在我的文件中,我有大約7條記錄,他們不會只給我 – 2013-04-25 11:13:03