投稿日 | : 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
※動くかな…長くなってすみません;
ノシ