タイトル | : 文字列の処理につきまして |
記事No | : 13428 |
投稿日 | : 2009/02/14(Sat) 15:27 |
投稿者 | : 健一くん |
初めてお邪魔いたします。皆様のお知恵を拝借いたしたく、投稿させて頂きました。初心者ですが、どうかよろしくお願いいたします。
WindowsXp(SP3)、VB(SP6)におきまして、commポートのアプリケーションを作成しようとしております。以下は、ソースの中から必要な部分を抜粋したものです。
まず、 Private rx_data_buff As String と変数を宣言します。
この変数に対して Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive comm_status = comm_status Or COMM_RECEIVE rx_data_count = rx_data_count + MSComm1.InBufferCount rx_data_buff = rx_data_buff & MSComm1.Input End Select End Sub とcommポートより受信します。
その後 If (LenB(rx_data_buff) >= 5) Then rx_byte_num = Val("&h" & MidB(rx_data_buff, 2, 4)) rx_byte_remain = rx_byte_num '←← End If と処理をしています。処理の内容としては、rx_data_numに受信したデータに含まれる「受信データ長」が設定される事を意図しております。 また←の行でBreakをかけてASCIIダンプをしたところ、rx_data_buffには16進表記で 02:STX 30:「0」 30:「0」 30:「0」 45:「E」 30:「0」 30:「0」 30:「0」(以下続く) と、期待通り(送信側が送信したデータ)の値が入っています。STXの次から4バイトに「これから受信すべきデータのバイト数」が設定されており、つまり「14バイトを受信せよ」と云うことを表しております。この「14」をrx_byte_numに設定したいと考えております。
この状態で、以下の2点をご教示下さい。
1.上記プログラムの rx_byte_num = Val("&h" & MidB(rx_data_buff, 2, 4)) では、なぜかrx_byte_num = 0になってしまいます。何処に問題があるのでしょうか? Mid$、MidB$、CStr等試してみましたが、思いついた範疇ではどうやっても「0」以外にはなりませんでした。
2.←の行でBreakをかけ、ウォッチウィンドウにてrx_data_buffの内容を確認すると、「。?ぅ????」と表示されます。しかし前述のようにASCIIダンプすると、正常にデータは入っております。これは何が悪いのでしょうか?
ソースコード等できるだけアップするようにいたしますので、ご教示よろしくお願いいたします。
|