プロが教える店舗&オフィスのセキュリティ対策術

以下のプログラムをVBに変換する仕方を教えてください。

サンプルプログラム
1110 CHKSUM=0
1120 FOR i=1 to LEN(A$)      'A$は送信データ
1130 CHKSUM=CHKSUM+ASC(MID$(A$,i,1)
1140 NEXT i
1150 C$=CHR$((CHKSUM+13) MOD 256)
1160 PRINT #1,A$;CHR$(13);C$;

私のVBプログラムは1110行から1150行まではそのままで
CHKSUM=0
FOR i=1 TO LEN(A$)
CHKSUM=CHKSUM+ASC(MID$(A$,i,1)
NEXT i
C$=CHR$((CHKSUM+13) MOD 256)
としました。

送信部分を
MSComm1.Output =A$ & CHR$(&H13) & C$
としてみましたが
1160行にあるセミコロン ";" はCHR$(&h3B) として送る必要があるのでしょうか?
MSComm1.Output =A$ & CHR$(&h3B) & CHR$(&h13) ・・・・・・
また、データとしてA$="I 02"のチェックサムは "リ" となりますが正しいのでしょうか?
以上ご教示ください。

A 回答 (2件)

VBのバージョンは?


新しいものであれば内部はUniCode化されていると思うので昔のソースを移行するのは大変と思う、特に半角文字を扱う場合は

送信データはStrConvでAsciiにしてバイト配列にしチェックサムは XOR演算したと思ったけど・・・
偶数、奇数があるので最後に反転しないといけない場合もあるけど

それとPrint文の;は続けて書く場合に使いますのでCHR$(&h3B) を付ける必要はありません
Print "a","b" とすると a_______b となります_=Space
また Print "a";"b"とすると ab となります

Print "a"
Print "b"
なら
a
b

Print "a";
Print "b"
なら
ab

通常送信データには改行を送らないので
最後の Print "b" も Print "b"; と書きます

この回答への補足

ありがとう。
出力文中のコロン、セミコロン、カンマ はモニター表示形式と同じですよね。思い出しました。CHR$(&H13)は"CR" (&H0D) なので私の間違いでした。

どうもターゲット機器のサンプル通信プログラム仕様のバージョンが違う様で、コマンド自体も違っている様です。今日一日かけてコマンドを探るソフトを追加して応答が来るまで待ちます。皆さんありがとう。また宜しく。

補足日時:2009/01/31 11:06
    • good
    • 0

移植性を考えるなら


Dim A$ → Dim A As String
MID$(A$, i, 1) → Mid(A, i, 1)
とすべきですね。これはVB.NET以降は型記号が使えないためです。
チェックサムは色々な形式があるので、何が正解かは「方式による」
としか言えません。Print文にある";"セミコロンは変換不要ですが、
","はvbTabに変換し、後方に何も無い場合は最後にvbCrLfを追加する
ようにします。
あと、CHR$(&H13)というのは独特の区切り記号なんですかねぇ?
もしかしてキャリッジリターンのことあればvbCrにすべきです。

この回答への補足

ありがとう。ターゲット機器のチェックサム計算式はサンプル通り。出力文のセミコロンは不要との事、了解。文法の件は了解。感謝。

補足日時:2009/01/31 10:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!