• ベストアンサー

バイト型のデータをLong型に変換

初歩的なことですみません。 Dim a(0 to 3) as Byte Dim b as Long と宣言します。 この変数aをLong型のbに変換するにはどのように したらよいのでしょうか? 逆にbの値をaに変換する方法もできましたらお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

色々な方法があります。 (1)論理演算子 a(0) = b And &HFF# a(1) = (b And &HFF00#) / &H100# a(2) = (b And &HFF0000#) / &H10000# a(3) = (b And &H7F000000#) / &H1000000# If (b And &H8000000) Then a(3) = (a(3) Or &H80) End If (2)ファイル Open "temp.tmp" For Binary As #1 Put #1, 1, b Get #1, 1, a Close #1 (3)RtlMoveMemory Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long) MoveMemory a(0), b, 4 MoveMemory b, a(0), 4 -- (2)が手堅く応用が利くかと。 (3)はlongならいいが、4の倍数でない型は問題あるかも。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

前半は、簡単に Sub main() Dim a As Byte Dim b As Long x = Asc(a) MsgBox x b = CLng(x) MsgBox b End Sub は間違ってますか。 自信ありませんので、ご存知の方教えてください。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 変換規則を具体例付きで提示して下さい。 a(0)~a(3)がどのような値の時、bにどのように変換された値が入るのか? または、bがどのような値の時、a(0)~a(3)はどのような値に変換されるのか? ひょっとして、256進数のようなことでしょうか? a(0)が1つ目の位、a(1)が2つ目の位という感じで。 でもその場合は、いくらByteが1バイト、Longが4バイトであっても、数値の範囲が、 Byte:0~255の"正の整数" Long:-2,147,483,648 ~ 2,147,483,647の整数 なので、まともには無理ですが。

関連するQ&A