文字列の比較がうまくできません への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 shu  (社会人)
投稿日時
2011/4/1 07:50:44
なぜ&H0が最後にあるデータで試しているのが分かりませんが
&H0を文字列の最後として扱っているということであれば、
&H0の前までのデータで変換をするようにすればよいかと思います。
&H0を文字列の最後として扱っているということであれば、
&H0の前までのデータで変換をするようにすればよいかと思います。
投稿者 シン  (社会人)
投稿日時
2011/4/1 00:12:27
うまくいかないコードをのせます。
ご指導おねがいます。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim bin() As Byte = {&H31, &H2E, &H34, &H2E, &H31, &H2E, &H31, &H2E, &H32, &H0} '1.4.1.1.2
Dim dA As String
dA = System.Text.ASCIIEncoding.ASCII.GetString(bin, 0, 10)
Label1.Text = dA
If dA = "1.4.1.1.2" Then
Label2.Text = "同じです"
Else
Label2.Text = "違います"
End If
End Sub
これでは"違います"とででしまいます。「&H0」をどのように処理したらよいのでしょうか。
ご指導おねがいます。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim bin() As Byte = {&H31, &H2E, &H34, &H2E, &H31, &H2E, &H31, &H2E, &H32, &H0} '1.4.1.1.2
Dim dA As String
dA = System.Text.ASCIIEncoding.ASCII.GetString(bin, 0, 10)
Label1.Text = dA
If dA = "1.4.1.1.2" Then
Label2.Text = "同じです"
Else
Label2.Text = "違います"
End If
End Sub
これでは"違います"とででしまいます。「&H0」をどのように処理したらよいのでしょうか。
投稿者 シン  (社会人)
投稿日時
2011/3/31 23:17:31
shuさん、ぺぺたろうさん、ご返答ありがとうございます。
shuさんのご指摘通り、文字列を検証したところ、一番最後に「&H00」がついておりました。
ASCIIコード表のNULで、System.Text.ASCIIEncoding.ASCII.GetStringで得られた文字列には、見えていませんでした。このことを、指摘されていたのですね。
でも、また困ってしまいました。
このように見えない文字は、どうやって比較したらよいのでしょうか。
shuさんのご指摘通り、文字列を検証したところ、一番最後に「&H00」がついておりました。
ASCIIコード表のNULで、System.Text.ASCIIEncoding.ASCII.GetStringで得られた文字列には、見えていませんでした。このことを、指摘されていたのですね。
でも、また困ってしまいました。
このように見えない文字は、どうやって比較したらよいのでしょうか。
投稿者 ぺぺたろう  (中学生)
投稿日時
2011/3/31 21:53:03
GetStringの第2、3引数の値がおかしいのかな、と思いましたが、iとLengthに代入しているコードが書かれてないのでわかりません。
投稿者 shu  (社会人)
投稿日時
2011/3/31 21:33:39
本当に"予想通りの文字列"が入っているのでしょうか?
dAに見えない文字が連結されている可能性があるので
よく調べてみる必要があります。
bufのバイト数から予想通りの文字列を取得できるかよく検証してみて下さい。
dAに見えない文字が連結されている可能性があるので
よく調べてみる必要があります。
bufのバイト数から予想通りの文字列を取得できるかよく検証してみて下さい。
投稿者 シン  (社会人)
投稿日時
2011/3/31 20:34:46
バイナリダンプを勉強しています。また別の質問をさせていただきます。
VB2010です。
System.Text.ASCIIEncoding.ASCII.GetStringで得られた文字列が、正しくえられているのかチェックしていますが、うまくいかなくてこまっています。
Dim buf() As Byte
FIleStream.readを用いてデータをbufに取り込んでいます。
Dim dA as string
dA = System.Text.ASCIIEncoding.ASCII.GetString(buf, i, Length)
label1.text=dA
ここまでは、label1に予想通りの文字列が得られているのが確認できています。
このあとで、
If dA ="予想通りの文字列" then
label2.text = "正しく得られています"
End if
としても、label2には反応が無く、ただしく比較できていないようです。
String.Equalsクラスなども試してみましたが、ダメでした。
どうすれば、うまく比較できるのでしょうか。
VB2010です。
System.Text.ASCIIEncoding.ASCII.GetStringで得られた文字列が、正しくえられているのかチェックしていますが、うまくいかなくてこまっています。
Dim buf() As Byte
FIleStream.readを用いてデータをbufに取り込んでいます。
Dim dA as string
dA = System.Text.ASCIIEncoding.ASCII.GetString(buf, i, Length)
label1.text=dA
ここまでは、label1に予想通りの文字列が得られているのが確認できています。
このあとで、
If dA ="予想通りの文字列" then
label2.text = "正しく得られています"
End if
としても、label2には反応が無く、ただしく比較できていないようです。
String.Equalsクラスなども試してみましたが、ダメでした。
どうすれば、うまく比較できるのでしょうか。
説明が足りませんでしたが、取得するデータの長さを指定するデータが、この前についているので、この場合ですと10バイトのデータを指定されているからです。
If dA="1.4.1.1.2" & Chr(0) Then
とすると、うまくいきました。
見えない文字を指摘していただき、ありがとうございます。
解決済みとさせていただきます。