投稿時間:2005/07/20(Wed) 21:21 投稿者名:ガッ
Eメール:
URL :
タイトル:Re^2: 型を一致させたい
> Byte型にキャストしましょ > > Buffer(i) = MidB(Text1.Text, i - 11, 1) > ↓ > Buffer(i) = CByte(MidB(Text1.Text, i - 11, 1)) > > #激しく誤爆... (・∀・)ニヤ でも、運がよければ例外起こりませんからねぇ… というわけで、質問内容で隠されてる部分が結構重要だったりw
> >※少し気になるところ→なんでMidB()を使っているの? > おそらくByte型の値域を超えるから? かなぁ…MidB()はStringの一部を切り出してStringを返すから、B yte型の値域を越えるとも考えられるけど、そもそも型が… ( ゜д゜)ハッ! ココで「型が一致しない」という疑問になって、 「じゃぁ型を一致させればいいじゃん♪」 となったのかな…?(orz →「信号赤じゃん進めないよー…」、「緑に塗っちゃえ♪」的なw;
> チロルさん 前も型の不一致で苦労なされているようですね。 ココは一つ出血大サービスを |ω・`) ?
-Module1.bas- Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As Any, Source As Any, ByVal Length As Long)
'buf()のLBound(buf)+offset位置にvを書き込む '例外処理はしていないので良く見て運転してください(? Public Sub WriteBytes(ByRef buf() As Byte, ByRef v() As Byte, Optional ByRef offset As Long) '※注意:bufにvの全てを書き込みます。 Dim cnt As Long cnt = UBound(v) - LBound(v) + 1 CopyMemory buf(LBound(buf) + offset), v(LBound(v)), cnt offset = offset + cnt End Sub Public Sub WriteInteger(ByRef buf() As Byte, ByVal v As Integer, Optional ByRef offset As Long) CopyMemory buf(LBound(buf) + offset), v, 2 offset = offset + 2 End Sub Public Sub WriteLong(ByRef buf() As Byte, ByVal v As Long, Optional ByRef offset As Long) CopyMemory buf(LBound(buf) + offset), v, 4 offset = offset + 4 End Sub '他は略。
'16進数で書かれたString→Byte() Public Function HexTOBytes(ByRef INstring As String) As Byte() 'INStringは"00 01 02 ff"などという文字列 'その文字列を" "で区切り、 '各々の元を16進数として評価して、配列として返す Dim v As Variant Dim cnt As Long Dim spl() As String Dim ret() As Byte '代入していく spl = Split(INstring, " ") ReDim ret(1 To UBound(spl) - LBound(spl) + 1) cnt = 0 For Each v In spl cnt = cnt + 1 ret(cnt) = Val("&h" & v) Next '戻る HexTOBytes = ret End Function
※動くかな…長くなってすみません; ノシ
|