いつも拝見させて頂いております。
早速ですが、テキストボックスに表示されているデータを、
そのままバイナリデータに変換して、COMポートから
送信したいのですが、どうしてもデータ変換のところが
うまくできません。
たとえば、テキストボックスに、"FF"と入っていたら、
それをバイナリデータの"FF"として送信したいのです。
WEBやヘルプ等で検索してみたのですが、解決できません
でした。
何卒ご教授の程、宜しくお願いいたします。
記述しているコードは以下のものです。
Private Sub Form_Load()
Text1.Text = "FF112233445566778899FF"
End Sub
Private Sub Command1_Click()
Dim Read_Text As String
Dim bytdat() As Byte
Dim i As Integer
For i = 1 To LenB(Text1.Text) / 2
Read_Text = Mid(Text1.Text, i, 2)
bytdat() = Read_Text '←この箇所を色々試したのですが...
MScomm1.Output = bytdat
i = i + 1
Next i
End Sub
Val関数を使ってもいいし、自分でHexString→数値なる関数/配列を作ってもいいかと。
すみません。環境を記述するのを忘れてました。
WindowsNT(SP6),VB6(SP6)です。
よろしくお願いします。
ガッ様。
早速のご返答ありがとうございます。
明日、職場でやってみます。
(家にはVBありませんので)
ただ今日、データ変換のところで
bytdat() = Hex(Read_Text)
とやったら、「配列には割り当てられません」
と言われてしまったような気が...
これだけではダメなんですね。
明日もう一度試してみます。
MSDNに載っていますが、
Msgbox Val("&h12")などで、16進数表記→数値に直すことが出来ます。
本日再度挑戦しました。
しかし解決できませんでした。
試しに以下のよううなコードを書き、試したのですが、
下記の場合ですと、作成された”test.bin”のファイルを
バイナリエディタで開くと、”46004600”と表示されてしまい
ます。バイナリエディタで開いても、”FF”と表示されるため
にはどのような変換を行えばいいのでしょうか?
ご指導の程、よろしくお願いいたします。
Private Sub Command1_Click()
Dim Text_Data As String
Dim bytdat() As Byte
Text_Data = "FF"
bytdat() = Hex(Val("&H" & Text_Data))
Open "c:\test.bin" For Binary As #1
Put #1, , bytdat
Close #1
End Sub
※もっと型を意識しましょう。
> Private Sub Command1_Click()
> Dim Text_Data As String
> Dim bytdat() As Byte
>
> Text_Data = "FF"
>
> bytdat() = Hex(Val("&H" & Text_Data))
・Val("&H" & Text_Data)は内部形式DoubleのVariant型を返します。
・Hex(number)は内部形式StringのVariant型(多分)を返します。
・Byte()=Stringの式は、Stringの内部表現のバイト列をByte()にコピーするというものです。
よって、Hex(Val("&H" & Text_Data))は"FF"という文字列を返し、
bytdat()は"FF"という文字列のバイト列になります。
> Open "c:\test.bin" For Binary As #1
> Put #1, , bytdat
> Close #1
>
> End Sub
ココまで書いたら…ダイジョブだよね?
すみません。
まだ、ダメです。
ここまでご親切にご指導いただき、まったく
情けないのですが、未だに解決できずにおります。
本日は、ガッ様のご指導から
>bytdat() = Hex(Val("&H" & Text_Data))
の、”HEX”の箇所が間違いの原因と認識し、
その箇所に、色々と代入し試したのですが、
どうもうまく動きませんでした。
(大抵、「配列には割り当てられません」と
いわれてしまいます。)
全然見当違いのことをしているのでしょうか?
できれば、もう少しヒントをいただきたいのですが?
残念ながら、私が教えれるヒントはもう出し尽くしてしまいました。
酷いかもしれませんが、即席のソースコードで勘弁してください(orz
Function GetBytes(ByVal HexDecString As String) As Byte()
'16進数表現の文字列を2文字ずつに区切り、
'その表現に対応する数値の配列を返すメソッド。
Dim i As Long
Dim Length As Long
Dim ret() As Byte
'入力の長さを求める
Length = Len(HexDecString) \ 2
If Length > 0 Then
'入力がある場合だけ処理をする
'retの初期化
ReDim ret(1 To Length)
'retに代入していく
For i = 1 To Length
ret(i) = Val("&h" & Mid$(HexDecString, (i - 1) * 2 + 1, 2))
Next
End If
'戻り値を設定
GetBytes = ret
End Function
※バグがあるかと思いますので、十分に注意してください。
Dim s As String
Dim b(1) As Byte
s = "EEFF"
b(0) = Val("&H" & Mid$(s,1,2))
b(1) = Val("&H" & Mid$(s,3,2))
ガッ様、id_rsa+様
返信が遅くなり申し訳ありません。
おかげさまで無事解決する事が出来ました。
(あたりまえですね。回答を教えて頂いたのですから)
とにかく、このような稚拙な質問に長々とお付き合い
くださいまして、本当に有難うございました。
ツイート | ![]() |