2009-10-31 85 views
1

我有一個問題寫入二進制文件。C#,寫入二進制數據

//This is preparing the counter as binary 
int nCounterIn = ...; 
int nCounterTotalInNetwork = System.Net.IPAddress.HostToNetworkOrder(nCounterIn); 
byte[] byteFormat = BitConverter.GetBytes(nCounterTotalInNetwork); 
char[] charFormat = System.Text.ASCIIEncoding.ASCII.GetChars(byteFormat); 
string strArrResults = new string(charFormat); 

//This is how writing it to a file using a BinaryWriter object 

m_brWriter.Write(strArrResults.ToCharArray()); 
m_brWriter.Flush(); 

問題是它寫入文件不正確。大部分時間它正確地寫入信息,但一旦它超過127,它會寫入633F錯誤的表示),直到255

然後重複這個錯誤,直到512

錯誤是什麼?

+0

的問題是,我需要此計數器在一個沖洗添加到消息,並打印出來,當我試圖打印它被打印爲8個字節,而不是4和錯誤值。我在打印前添加了: //這是準備計數器爲binaryint nCounterIn = ...; int nCounterTotalInNetwork = System.Net.IPAddress.HostToNetworkOrder(nCounterIn); byte [] byteFormat = BitConverter.GetBytes(nCounterTotalInNetwork);字符串strV = BitConvertor.ToString(byteFormat); strV + = //消息字符串DATA。 m_brWriter.Write(strV); m_brWriter.Flush(); –

回答

4

那是因爲你與ASCII編碼它,這是7位,它會切斷第8位,並將其設置爲0。

你爲什麼做這種方式?我試圖讓我的頭在你在那裏做什麼。

你爲什麼不簡單地寫你得到的字節數組而不是編碼它?

換句話說,你爲什麼不使用這段代碼?

//This is preparing the counter as binary 
int nCounterIn = ...; 
int nCounterTotalInNetwork = System.Net.IPAddress.HostToNetworkOrder(nCounterIn); 
byte[] byteFormat = BitConverter.GetBytes(nCounterTotalInNetwork); 
m_brWriter.Write(byteFormat); 
m_brWriter.Flush(); 
+0

爲什麼即使是一個作家 - 只是'寫'到'流';-p –

+0

爲什麼要寫入流? File.Appendtext(「filepath」,your counter); – Vitaliy

+0

當然,但如果他要用這位作家寫其他部分,我覺得最安全的就是保持它,但是,如果他不打算使用其他部分,我會去一個簡單的流。 –