- PR -

バイト文字列変換について

投稿者投稿内容
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2007-07-04 10:15
いつもお世話になります。
Visual Basic 2005についてバイト文字列の変換について
ご教授いただきたいのですが、

例えば)
@"mori"という文字列をASCII文字列に変換して、
A8バイトのバイト配列に格納しソケット通信で送信し
それを、受け取った側で
BSystem.Text.Encoding.ASCII.GetString(受け取ったバイト配列)
で変換します。
Cその後、Stringの文字列に格納し処理を行おうと思うのですが

上記のBまでは、デバッガーで見た場合、"mori"と表示されるのですが、
CのString配列に入れる際に"mori となってしまいます。
何が原因なのでしょうか。

分かる方がいましたら、ご教授いただけますでしょうか?


yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2007-07-04 11:56
いつもお世話になります。

先ほどの文字列変換の際の原因が
文字列の後尾にNULL文字があることが原因でした。

解決はしたのですが、
このNULL文字を取るような簡易な方法はあるのでしょうか?
(現在はループ処理でバイト配列の中身がNULL(0)であれば、スペースに
かえるといった処理を入れています。)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-07-04 12:20
引用:

yamayamaさんの書き込み (2007-07-04 11:56) より:

このNULL文字を取るような簡易な方法はあるのでしょうか?


System.Text.Encoding.GetString メソッドのオーバーロードを確認してみましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
YOSHI
会議室デビュー日: 2006/10/20
投稿数: 14
投稿日時: 2007-07-05 11:48
引用:

yamayamaさんの書き込み (2007-07-04 10:15) より:

@"mori"という文字列をASCII文字列に変換して、
A8バイトのバイト配列に格納しソケット通信で送信し
それを、受け取った側で
BSystem.Text.Encoding.ASCII.GetString(受け取ったバイト配列)
で変換します。
Cその後、Stringの文字列に格納し処理を行おうと思うのですが




じゃんぬねっとさんが答えを出していますが、私も一つ。
System.Text.Encoding.GetString メソッドでは、
「全て」か、「指定位置から何バイト」しか設定できません。
後ろのNULLは変換しないというのはできないみたいです。

ただ文字の途中にNULLが入る可能性も考慮するなら、yamayamaさんの置き換えが必要になりますね・・・。
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2007-07-07 17:09
ご回答いただきありがとうございました。
NULL文字をループで検索し、スペースに置き換えるようにしました。
(ソケット通信で使用するので、出来るだけ早い方法で変換したかったの
ですが、この変換方法でもさほどレスポンス的に問題ないような
気がしましたので、この方法で対応したいと思います。)
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2007-07-07 18:03
やってること(というかコスト)は変わらないけど、String.IndexOf を使った方がスマートに見えるかと。

送受信する内容を変更できるのなら、先頭に文字列のバイト数を埋め込むのがベストなんですけどねー。

[訂正]
String.IndexOf じゃなくて Array.IndexOf でした。

[ メッセージ編集済み 編集者: Hongliang 編集日時 2007-07-07 18:40 ]
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-07-07 18:13
本来ならば
"mori"
になってほしい文字列が
"mori[NULL]"
のような感じになっているということですよね。

であれば
s = s.Replace(Nothing, " "c)
(s は "mori[NULL]" が入っている変数)

でできませんか。

…って書いていたら Hongliang さんの回答が。
僕のは String に変換してから NULL を取り除く方法だけど
String に変換する前に Byte の段階で IndexOf を使って
NULL をスペースに置き換えるのがいいかもしれないですね。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-07-07 21:02
文字列変数sの末尾にNULL文字が付いているとして以下のようにしてはいかがでしょう。
s = s.TrimEnd(ControlChars.NullChar)

スキルアップ/キャリアアップ(JOB@IT)