2009-05-14 14 views
7

私は外部エンティティから受け取ったバイトの配列を持っています。固定サイズです。バイトは、バッファの残りのうちパッドに0の値を持つUnicode文字列を含む:System.Text.Encoding.Unicode.GetStringからnullで終わる文字列を取得する

ので、バイトは次のようになります。

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

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

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

方法CA:

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

は、私が戻って取得することは、このように見える文字列でありますn最初のUnicodeのヌルで文字列を終了するようにGetStringに指示します(つまり、単に "HELLO"に戻ります)。

ありがとうございます。

答えて

8

あなたは残りの部分はすべて\ 0であることを確認している場合、これは動作します:

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

そうでない場合は、あなただけの最初のヌルの前にすべてを取得したい場合:

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

。なお、 Unicode.GetStringはダブル\ 0を処理します。ただ1つの\ 0を探してください。

1

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

文字カウントが事前に分かっている場合は、開始文字列とバイト数を取得するGetStringオーバーロードを使用して、トリミングせずに正しい文字列を取得できます。

文字カウントが事前にわからず、その後に文字列をトリミングしないようにするには、まずバイト配列をトリミングして、目的のバイトだけを渡す必要があります。最初のゼロのペアの後にあるすべてのバイトを削除することを意味します。

関連する問題