009集——vba实现内存中大小端序的转换(附不同进制转换代码)

         小端序为很多系统默认的数据存储方式,但有些数据格式为大端序模式解读文件,因此我们需将小端序字节颠倒排序,这样用大端序模式解读此文件,最后即可读取我们想要的内容。方法如下:

Function SwapEndian(ByVal value As Long) As Long
    ' 将 Long 类型的值拆分为 4 个 Byte
    Dim byte1 As Long, byte2 As Long, byte3 As Long, byte4 As Long
    byte1 = value Mod 256      ' 最低有效字节
    value = value \ 256        ' 移除最低有效字节
    byte2 = value Mod 256      ' 次低有效字节
    value = value \ 256
    byte3 = value Mod 256      ' 次高有效字节
    value = value \ 256
    byte4 = value              ' 最高有效字节
      
    ' 交换字节顺序以从大端序排列
    Dim temp As Long
    temp = byte1
    byte1 = byte4
    byte4 = temp
    temp = byte2
    byte2 = byte3
    byte3 = temp
    SwapEndian = byte4 * &H100000 + byte3 * &H1000 + byte2 * &H10 + byte1
    ' 将交换后的字节重新组合为 Long 类型的值
End Function
  
Sub endiancovert()
    Dim mylong As Long
    ' 假设 mylong 是你要转换的 Long 类型值
    mylong = 1000
 
    'MsgBox mylong & "  转为十六进制为: " & Hex(mylong)
    mylong = SwapEndian(mylong)
    'MsgBox "端序转换后为: " & Hex(mylong)
    MsgBox "转换端序后对应的数为:" & mylong
End Sub

&H :

&H 是一个前缀,用于表示接下来的字符是十六进制(Hexadecimal)数值。VBA 支持多种数字表示法,包括十进制(默认)、八进制(使用 &O 前缀)和十六进制(使用 &H 前缀)。

十六进制是一种基数为 16 的数制系统,它使用 0-9 的十个阿拉伯数字和 A-F(或小写 a-f)的六个英文字母来表示数值。其中,A-F 代表十进制的 10-15。

例如,在 VBA 中,你可以使用十进制表示法来声明一个整数变量:

 

vba复制代码

Dim decimalValue As Integer
decimalValue = 255

或者,你可以使用十六进制表示法来声明并初始化同一个整数变量:

 

vba复制代码

Dim hexValue As Integer
hexValue = &HFF

在这两个例子中,decimalValue 和 hexValue 都将包含相同的数值,即十进制的 255,十六进制的 FF。

使用十六进制表示法在某些情况下非常有用,特别是当你处理二进制数据、内存地址、颜色代码(如 RGB 值)或其他需要直接操作位模式的场景时。

在这里说下hex函数

Hex 函数

      

返回代表十六进制数值的 String。

语法

Hex(number)

必要的 number 参数为任何有效的数值表达式或字符串表达式。

说明

如果 number 还不是一个整数,那么在执行前会先被四舍五入成最接近的整数。

如果 number 所得为
NullNull
Empty零 (0)
任何其他的数字最多可到八个十六进制字符。

        适当范围内的数字,前缀以 &H,可以直接表示十六进制数字。例如,十六进制表示法的 &H10 代表十进制的 16。

十六进制数转为10进制可用如下函数:Val(&H10)

Val 函数

      返回包含于字符串内的数字,字符串中是一个适当类型的数值。

十六进制与二进制转换代码:

Function HexToBinary(ByVal hexString As String) As String
    ' 将16进制字符串转换为十进制数
    Dim decimalValue As Long
    decimalValue = Val("&H" & hexString)
      
    ' 将十进制数转换为二进制字符串
    HexToBinary = DecToBin(decimalValue)
End Function
  
' 辅助函数:将十进制数转换为二进制字符串
Function DecToBin(ByVal decimalValue As Long) As String
    Dim binaryString As String
    Dim remainder As Long
      
    ' 循环直到十进制数为0
    Do While decimalValue > 0
        ' 取余数作为当前位
        remainder = decimalValue Mod 2
        binaryString = CStr(remainder) & binaryString
        ' 整除2
        decimalValue = decimalValue \ 2
    Loop
      
    ' 如果二进制字符串为空,则返回"0"
    If binaryString = "" Then
        binaryString = "0"
    End If
      
    ' 返回二进制字符串
    DecToBin = binaryString
End Function
Sub TestHexToBinary()
    Dim hexNumber As String
    Dim binaryNumber As String
      
    hexNumber = "a" ' 十六进制数
    binaryNumber = HexToBinary(hexNumber) ' 转换为二进制数
      
    ' 显示结果
    MsgBox "Binary value: " & binaryNumber
End Sub

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值