dポイントプレゼントキャンペーン実施中!

初歩的なことですみません。

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

A 回答 (3件)

色々な方法があります。



(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の倍数でない型は問題あるかも。
    • good
    • 1

前半は、簡単に


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

こんにちは。

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の整数
なので、まともには無理ですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A