VBA中十六进制转换问题
VBA语言中,数字表示的方法还有八进制、十六进制、科学计数法。例如
Dim a As Integer
Dim b As Integer
a = &O111
b = &HA
对于科学计数法,如果书写代码时录入 a = 1.2E-3,VBA编辑器会自动改写为0.0012
- 预先了解的英语知识
二进制BIN、八进制OCT、十进制DEC、十六进制HEX
- 十进制数字转换为八进制、十六进制、字符串
VBA内置函数库下面Conversion类中,有OCT、HEX等函数,用于将任何形式的数字转换为字符串。例如
?VBA.Conversion.Hex(10)将得到字符串"A",这是因为十进制的10与十六进制的A是相等的。 10=&HA
注意了,转换为其他进制,得到的结果是字符串(划重点)
Sub 数字转换为其他进制()
Dim d As Integer
Dim o As String
Dim h As String
Dim s As String
d = 93
o = Oct(d)
h = Hex(d)
s = CStr(d)
Debug.Print o, h '打印结果 "135" "5D"
Debug.Print d, s '打印结果 93 "93"
End Sub
从上例子可以看到十进制93等于八进制的135,也等于十六进制的5D。下面继续学习
- 数字的等价性
VBA中,凡是以&O或&H开头的都是数字,不是字符串(划重点)。除非故意用双引号包围起来。
也就是说,&O135是十进制的数字,无论是类型还是大小,与数字93完全相同!
Sub 数字的等价性()
Dim d As Integer
Dim o As Integer
Dim h As Integer
d = 93
o = &O135
h = &H5D
Debug.Print d = o
Debug.Print d = h
End Sub
以上打印出两个True。证明一切!只不过是表现不同而已。
- 字符串转换为数值
对于任何形式的数字字符串,均可使用Val函数转换为对应的十进制数
Sub 字符串转换为数字()
Dim d As Integer
Dim o As Integer
Dim h As Integer
d = Val("93")
o = Val("&O135")
h = VBA.Conversion.Val("&H5D")
End Sub
(全文完)