数値データを送信するには?


しん  2008-01-15 14:29:28  No: 100074  IP: 192.*.*.*

RS-232CでHTERMに数値データを送信したいのですが、文字データになってしまいます。どうすればよいのかよければ教えてください。

編集 削除
我龍院  2008-01-15 17:05:47  No: 100075  IP: 192.*.*.*

Byte配列で送る。

編集 削除
しん  2008-01-15 18:35:22  No: 100076  IP: 192.*.*.*

返事ありがとうございます!
Byte配列で送ろうとしてもできないのですが、どこが悪いのですか?
よかったら教えてください。
            ma(3) = 1
            ma(4) = 2
            i = Val(ma(3)) & Val(ma(4))
            i = ma(3) & ma(4)
            AxMSComm1.Output = ma(3) & ma(4)

編集 削除
しんご  2008-01-16 00:39:58  No: 100077  IP: 192.*.*.*

このコードではどこもかしこも・・・
変数「i」は意味あるんですか?
1と2をByte配列で送りたいんですか?
MSCommの通信関係のプロパティはどうなっていますか?

編集 削除
我龍院  2008-01-16 08:43:11  No: 100078  IP: 192.*.*.*

MSCommコントロールのOutput プロパティは多態性が有って、
文字列をセットすると文字列を、数値をセットすると数値を、
配列をセットすると其の配列の中身を送信します。
たとえば1と2の2バイトの数値を送りたい場合は、
Dim byteData(1) As Byte
byteData(0) = 1
byteData(1) = 2
MSComm1.Output = byteSendData()
とやるわけです。
通常数値は16進で書きます、なぜかと言うと12を送ると言った場合
1と2を送りたいのか12を送りたいか紛らわしい為で、この場合は
&H1と&H2の2バイトを送ると言えば間違いが起こりにくい訳です。

VBの「&」演算子はこれも多態性を持っていて、文字列を両側にセットすると
文字列の連結を返し、どちらか一方又は両方に数値をセットすると
数値を文字列に変換してしてそれを連結して返します。
従って ma(3) & ma(4)  は文字列を返していますから、数値ではなく
文字列が送られた訳です。

多分変数「i」は色々やってみたのでしょうが、このValは基本的には
引数の文字列を数値に変換して返しますが、引数に何でも来いの複雑な関数で、
Val(5)とやってもVal("5")とやっても5を返しますし、Val("&HFA")とやっても
Val(&HFA)とやっても250を返します、またVal("&HFA 5")とすると4005を
返すと言う変わり者です。

それとコードの最初に「Option Explicit」を必ず書き、変数は宣言して使いましょう、
今回の場合も下のように宣言をしていれば、エラーが出たはずです。
Dim i As Integer
i = ma(3) & ma(4)
AxMSComm1.Output = i

編集 削除