22

私はこれに似たバイト配列(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エンコーディングを使用しようとしましたが、何も変更されません。

前もって感謝します :)

4

5 に答える 5

33

あなたはTrimEnd(new char[] { (char)0 });これを修正するためにやらなければなりません。それはスペースではありません-奇妙に変換されるのは実際にはヌル文字です。私もこの問題を抱えていました。

于 2009-09-09T23:14:02.763 に答える
22

それらは実際にはスペースではありません:

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

...トリックを行う必要があります。

-オシーン

于 2009-09-09T23:16:19.083 に答える
8

デフォルトでは、トリムは空白のみを削除します。空白はで定義されchar.IsWhitespaceます。

'\0'空白ではなく、制御文字です。

Trim(char[])オーバーロードを使用して、トリミングする文字を指定できます。

string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });
于 2009-09-09T23:16:38.897 に答える
1

なぜ最初に文字列を作成し、次にそれをトリミングしようとするのですか?これにより、多くのオーバーヘッドが追加される可能性があります(byte []が大きい場合)。

indexcountGetString(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
于 2011-07-25T22:59:59.853 に答える
0

PowerShellでは、次のことができます。

$yourString.TrimEnd(0x00)
于 2014-03-25T20:53:07.640 に答える