2009-10-31 60 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

当然,但如果他要用这位作家写其他部分,我觉得最安全的就是保持它,但是,如果他不打算使用其他部分,我会去一个简单的流。 –