質問

次のようなバイト配列があります(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')

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

-オイシン

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

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

Trim(char [ ]) オーバーロード:

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

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

GetString(byte [] bytes、int index、int count)オーバーロードで index 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