2009-10-31 7 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, она пишет 63 (3F неправильное представление) до 255.

Затем эта ошибка повторяется до 512.

В чем может быть ошибка?

+0

Проблема заключается в том, что мне нужно добавить этот счетчик к сообщению и распечатать его в один флажок, когда я пытаюсь его распечатать, он печатается как 8 байт вместо 4 и неправильное значение. Я добавил перед печатью: // Это готовит счетчик как binaryint nCounterIn = ...; int nCounterTotalInNetwork = System.Net.IPAddress.HostToNetworkOrder (nCounterIn); byte [] byteFormat = BitConverter.GetBytes (nCounterTotalInNetwork); string 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

Зачем писать в поток? Файл.Appendtext («путь к файлу», ваш счетчик); – Vitaliy

+0

Уверен, но если он собирается писать другие части с помощью этого писателя, я чувствовал себя безопаснее просто сохранить его, но да, если он не собирается использовать другие его части, я бы пошел на простой поток. –

Смежные вопросы