找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4708|回复: 3

VB中字节数组和其他数据类型之间的转化

  [复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-3-6 23:11:32 | 显示全部楼层 |阅读模式
本帖最后由 Tesla.Angela 于 2010-3-6 23:15 编辑

  1. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  2. Private Sub Command1_Click()
  3.     Dim test(0 To 3) As Byte
  4.     Dim i As Long, j As Long
  5.     i = 1000
  6.     '从long转化为byte数组
  7.      CopyMemory test(0), i, 4
  8.      '从byte数组转化为long
  9.      CopyMemory j, test(0), 4
  10.      MsgBox j
  11. End Sub
  12. '或者根据下面的代码中的函数进行转换:
  13. Public Function HiByte(ByVal wParam As Integer) As Byte
  14.   'note: VB4-32 users should declare this function As Integer
  15.    HiByte = (wParam And &HFF00&) \ (&H100)
  16. End Function
  17. Public Function LoByte(ByVal wParam As Integer) As Byte
  18.   'note: VB4-32 users should declare this function As Integer
  19.    LoByte = wParam And &HFF&
  20. End Function
  21. Public Function HiWord(wParam As Long) As Integer
  22.    If wParam And &H80000000 Then
  23.       HiWord = (wParam \ 65535) - 1
  24.    Else
  25.       HiWord = wParam \ 65535
  26.    End If
  27. End Function
  28. Public Function LoWord(wParam As Long) As Integer
  29.    If wParam And &H8000& Then
  30.       LoWord = &H8000& Or (wParam And &H7FFF&)
  31.    Else
  32.       LoWord = wParam And &HFFFF&
  33.    End If
  34. End Function
  35. Public Function LoWordCM(wParam As Long) As Integer
  36.   'using API
  37.    CopyMemory LoWordCM, wParam, 2
  38. End Function
  39. Public Function LShiftWord(ByVal w As Integer, ByVal c As Integer) As Integer
  40.    Dim dw As Long
  41.    dw = w * (2 ^ c)
  42.    If dw And &H8000& Then
  43.       LShiftWord = CInt(dw And &H7FFF&) Or &H8000&
  44.    Else
  45.       LShiftWord = dw And &HFFFF&
  46.    End If
  47. End Function
  48. Public Function RShiftWord(ByVal w As Integer, ByVal c As Integer) As Integer
  49.    Dim dw As Long
  50.    If c = 0 Then
  51.       RShiftWord = w
  52.    Else
  53.       dw = w And &HFFFF&
  54.       dw = dw \ (2 ^ c)
  55.       RShiftWord = dw And &HFFFF&
  56.    End If
  57. End Function
  58. '两个byte转换为一个integer
  59. Public Function MakeWord(ByVal bHi As Byte, ByVal bLo As Byte) As Integer
  60.    If bHi And &H80 Then
  61.       MakeWord = (((bHi And &H7F) * 256) + bLo) Or &H8000&
  62.    Else
  63.       MakeWord = (bHi * 256) + bLo
  64.    End If
  65. End Function
  66. '两个integer转换为一个long
  67. Public Function MakeDWord(wHi As Integer, wLo As Integer) As Long
  68.    If wHi And &H8000& Then
  69.       MakeDWord = (((wHi And &H7FFF&) * 65536) Or _
  70.                     (wLo And &HFFFF&)) Or &H80000000
  71.    Else
  72.       MakeDWord = (wHi * 65535) + wLo
  73.    End If
  74. End Function
复制代码


http://blog.csdn.net/gxj022/archive/2007/11/21/1896288.aspx

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-3-9 21:05:00 | 显示全部楼层
这个有什么用啊!?
本网站最菜的人 该用户已被删除
发表于 2010-3-12 20:39:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

38

主题

199

回帖

2

精华

钻石会员

积分
3408
发表于 2010-3-12 22:23:16 | 显示全部楼层
貌似可以用HOOK转化
本网站最菜的人 发表于 2010-3-12 20:39



    你说说看。
如果附件无法下载,请点击这里
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表