プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

VB6にて下記ソースの様にバイトオーダのエンディアン変換を行っているのですが、
一旦Stringに入れ込んでいるせいなのか、
非常に処理が遅く困っております。

2Btyteのデータの入れ替えだけなのですが、
高速化もしくは単純化する方法がございましたら教えていただけないでしょうか

Public Function Swap(ByVal L As Long) As Integer
Dim S As String

S = Right(String(4, "0") & Hex(L), 4)
Swap = CInt("&H" & Right(S, 2) & Left(S, 2))
End Function

A 回答 (2件)

構造体を使ってバイトを入れ替える方法。



Public Type Data4Byte2
myByte(1) As Byte
End Type

Public Type Data4Byte4
myByte(3) As Byte
End Type

Public Type Data4Integer
myInteger As Integer
End Type

Public Type Data4Long
myLong As Long
End Type

Public Function Swap(ByVal L As Long) As Integer
Dim d4b2 As Data4Byte2
Dim d4b4 As Data4Byte4
Dim d4i As Data4Integer
Dim d4l As Data4Long
'
d4l.myLong = L
LSet d4b4 = d4l
d4b2.myByte(0) = d4b4.myByte(1)
d4b2.myByte(1) = d4b4.myByte(0)
LSet d4i = d4b2
Swap = d4i.myInteger
End Function
    • good
    • 1
この回答へのお礼

ありがとうございました
おかげさまで、
なんと23sかかっていた処理が13sと大幅に短縮ができました。
構造体を使うなんて、なんて発想が柔軟なんでしょう!!

お礼日時:2013/08/21 14:15

Swap = L / 256 + (L Mod 256) * 256



など

この回答への補足

回答ありがとうございます。
教えていただいた方法ですと、符号付の値がずれてしまいませんか?

補足日時:2013/08/20 18:59
    • good
    • 0

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