سؤال

لدي مشكلة في الكتابة إلى الكتابة إلى ملف ثنائي.

//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.

ماذا يمكن أن يكون الخطأ؟

هل كانت مفيدة؟

المحلول

هذا لأنك ترميزه مع ASCII، وهو 7 بت، فسوف يقلل من القليل الثامن وتعيينه إلى 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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top