سؤال

لدي صفيف بايت مشابه لهذا (16 بايت):

71 77 65 72 74 79 00 00 00 00 00 00 00 00 00 00

أستخدم هذا لتحويله إلى سلسلة وتقليم مساحات النهاية:

ASCIIEncoding.ASCII.GetString(data).Trim();

أحصل على السلسلة بشكل جيد ، ومع ذلك لا يزال يحتوي على جميع المساحات النهائية. لذلك أحصل على شيء مثل "qwerty.........." (حيث تكون النقاط مسافات بسبب stackoverflow).

ما الخطأ الذي افعله؟

لقد حاولت أيضًا استخدام .trimend () واستخدام ترميز UTF8 ، لكنه لا يغير أي شيء.

شكرا مقدما :)

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

المحلول

عليك أن تفعل TrimEnd(new char[] { (char)0 }); لإصلاح هذا. إنها ليست مسافات - إنها في الواقع شخصيات خالية يتم تحويلها بغرابة. كان لي هذه المسألة أيضا.

نصائح أخرى

إنها ليست مسافات حقًا:

System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')

... يجب أن تفعل الخدعة.

-oisin

تقليم افتراضيا يزيل المسافة البيضاء فقط, ، حيث يتم تعريف المسافة البيضاء بواسطة char.IsWhitespace.

'\0' هي شخصية تحكم ، وليس مسافة بيضاء.

يمكنك تحديد الأحرف التي يجب تقليمها باستخدام Trim(char[]) الحمل الزائد:

string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });

لماذا تحاول إنشاء السلسلة أولاً وتقليصها الثانية؟ هذا يمكن أن يضيف الكثير من النفقات العامة (إذا كان البايت [] كبير).

يمكنك تحديد index و count في ال GetString(byte[] bytes, int index, int count) الحمل الزائد.

int count = data.Count(bt => bt != 0); // find the first null
string result = Encoding.ASCII.GetString(data, 0, count); // Get only the characters you want

في PowerShell ، يمكنك القيام بذلك:

$yourString.TrimEnd(0x00)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top