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

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

Function 转为大端序(ByVal value As Long)
Dim s1 As String, s2 As String, s3 As String, s4 As String, temp As String
s1 = "00": s2 = "00": s3 = "00": s4 = "00"
Dim strvalue As String
strvalue = Hex(value)
strvalue = IIf(Len(strvalue) Mod 2 = 0, strvalue, "0" & strvalue)
s1 = Right(strvalue, 2)
temp = Left(strvalue, Len(strvalue) - 2)
If Len(temp) > 0 Then
    s2 = Right(temp, 2)
    temp = Left(temp, Len(temp) - 2)
    If Len(temp) > 0 Then
     s3 = Right(temp, 2)
    End If
End If
Dim temp1 As String
temp1 = s1 & s2 & s3 & s4
Dim temp2 As Long
temp2 = "&H" & temp1
转为大端序 = Val(temp2)
End Function

c#转换可参考本博另一篇文章

https://mp.youkuaiyun.com/mp_blog/creation/editor/141825142

&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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水CAD插件定制

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值