C #، كتابة البيانات الثنائية
-
11-09-2019 - |
سؤال
لدي مشكلة في الكتابة إلى الكتابة إلى ملف ثنائي.
//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();
لا تنتمي إلى StackOverflow