- - PR -
バイト文字列変換について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-07-04 10:15
いつもお世話になります。
Visual Basic 2005についてバイト文字列の変換について ご教授いただきたいのですが、 例えば) @"mori"という文字列をASCII文字列に変換して、 A8バイトのバイト配列に格納しソケット通信で送信し それを、受け取った側で BSystem.Text.Encoding.ASCII.GetString(受け取ったバイト配列) で変換します。 Cその後、Stringの文字列に格納し処理を行おうと思うのですが 上記のBまでは、デバッガーで見た場合、"mori"と表示されるのですが、 CのString配列に入れる際に"mori となってしまいます。 何が原因なのでしょうか。 分かる方がいましたら、ご教授いただけますでしょうか? | ||||
|
投稿日時: 2007-07-04 11:56
いつもお世話になります。
先ほどの文字列変換の際の原因が 文字列の後尾にNULL文字があることが原因でした。 解決はしたのですが、 このNULL文字を取るような簡易な方法はあるのでしょうか? (現在はループ処理でバイト配列の中身がNULL(0)であれば、スペースに かえるといった処理を入れています。) | ||||
|
投稿日時: 2007-07-04 12:20
System.Text.Encoding.GetString メソッドのオーバーロードを確認してみましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-07-05 11:48
じゃんぬねっとさんが答えを出していますが、私も一つ。 System.Text.Encoding.GetString メソッドでは、 「全て」か、「指定位置から何バイト」しか設定できません。 後ろのNULLは変換しないというのはできないみたいです。 ただ文字の途中にNULLが入る可能性も考慮するなら、yamayamaさんの置き換えが必要になりますね・・・。 | ||||
|
投稿日時: 2007-07-07 17:09
ご回答いただきありがとうございました。
NULL文字をループで検索し、スペースに置き換えるようにしました。 (ソケット通信で使用するので、出来るだけ早い方法で変換したかったの ですが、この変換方法でもさほどレスポンス的に問題ないような 気がしましたので、この方法で対応したいと思います。) | ||||
|
投稿日時: 2007-07-07 18:03
やってること(というかコスト)は変わらないけど、String.IndexOf を使った方がスマートに見えるかと。
送受信する内容を変更できるのなら、先頭に文字列のバイト数を埋め込むのがベストなんですけどねー。 [訂正] String.IndexOf じゃなくて Array.IndexOf でした。 [ メッセージ編集済み 編集者: Hongliang 編集日時 2007-07-07 18:40 ] | ||||
|
投稿日時: 2007-07-07 18:13
本来ならば
"mori" になってほしい文字列が "mori[NULL]" のような感じになっているということですよね。 であれば s = s.Replace(Nothing, " "c) (s は "mori[NULL]" が入っている変数) でできませんか。 …って書いていたら Hongliang さんの回答が。 僕のは String に変換してから NULL を取り除く方法だけど String に変換する前に Byte の段階で IndexOf を使って NULL をスペースに置き換えるのがいいかもしれないですね。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2007-07-07 21:02
文字列変数sの末尾にNULL文字が付いているとして以下のようにしてはいかがでしょう。
s = s.TrimEnd(ControlChars.NullChar) |