15

外部エンティティから受け取るバイトの配列があります。固定サイズです。バイトには Unicode 文字列が含まれており、値が 0 で残りのバッファが埋められます。

したがって、バイトは次のようになります。

H \0 E \0 L \0 L \0 \0 \0 \0 \0 \0 ... etc 

私はそのバッファを取得し、次のように文字列に変換しています:

byte[] buffer = new byte[buffSize];
m_dataStream.Read(buffer, 0, buffSize);
String cmd = System.Text.Encoding.Unicode.GetString(buffer);

返されるのは、次のような文字列です。

"HELLO\0\0\0\0\0\0\0\0..."

最初の Unicode null で文字列を終了するように GetString に指示するにはどうすればよいですか (つまり、"HELLO" を返すだけです)。

ご意見ありがとうございます。

4

4 に答える 4

15

残りがすべて \0 であることが確実な場合、これは機能します。

cmd = cmd.TrimEnd('\0');

それ以外の場合、最初の null の前にすべてを取得したい場合:

int index = cmd.IndexOf('\0');
if (index >= 0)
   cmd = cmd.Remove(index);

Unicode.GetString二重の \0 を処理することに注意してください。単一の \0 を探す必要があります。

于 2009-05-14T16:11:47.160 に答える
2

最も簡単な方法は、すでに提案されているように、変換後に文字列をトリミングすることです。

文字数が事前にわかっている場合は、トリミングせずに正しい文字列を取得するために、開始インデックスとバイト数を受け取る GetString オーバーロードを使用できます。

事前に文字数がわからず、後で文字列をトリミングしたくない場合は、最初にバイト配列をトリミングする必要があるため、必要なバイトのみを渡します。Unicode の場合、これはすべてのバイトを削除することを意味します。最初のゼロのペアの後およびそれを含みます。

于 2009-05-14T16:15:42.643 に答える