C#で末尾に0があるByte配列をStringに変換する

\0がそのまま変換されてしまうので、それの対処方法。


byte[] byteArray = { 0x41, 0x42, 0x43, 0 }; // "ABC\0"
string msg = Encoding.ASCII.GetString(byteArray);
msg = msg.TrimEnd('\0'); // ※これが必要
MessageBox.Show(msg + msg);

P/InvokeでDLLから文字列を取得するとNULL終端文字列となっていたりします。これをStringに変換するとNULL文字がそのまま変換されて具合が悪いことがあります。例えば上記コードでTrimEnd行がないとmsg+msgが”ABC\0ABC\0″となってしまい、ダイアログボックスに”ABC”と表示されてしまいます。そんなときはTrimEndメソッドで末尾の\0を取りましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA