Hex 转十六进制

文章目录
  1. 1. 功能
  2. 2. 语法
  3. 3. 参数
  4. 4. 返回值
  5. 5. 示例
  6. 6. 备注

功能

将数值转换为十六进制字符串内容

语法

结果 = Hex(数值)

参数

参数 数据类型 解释
数值 数值型 任意有效数值表达式

返回值

字符串, 返回最大八位的十六进制字符串, 如果 数值 参数不是整数,则在进行运算前将其四舍五入为最接近的整数。

示例

1
2
3
4
5
6
7
8
9
10
11
Dim MyHex
MyHex = Hex(5) ' 返回 5。
MyHex = Hex(10) ' 返回A。
MyHex = &H459
TracePrint MyHex ‘输出1CB

//十六进制字符串转十进制方法
//上面最后一步MyHex变量的值是1CB
Dim num
num = Clng("&h" & MyHex)
TracePrint num '输出459
1
2
3
4
5
6
7
8
9
/*一个VBScript中&h的坑
下面x的值是-1, y值是65535
原因: VBScript认为&HFFFF存放的是Integer类型, 但实际应该是Long型
解决: 在十六进制后面加一个&的语法是来自VB, 表示强制转换成Long型
*/
x = &HFFFF
y = &HFFFF&
TracePrint TypeName(x) & ": " & x
TracePrint TypeName(y) & ": " & y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//高级例子
//说明: 2到62任意进制转换
//原内容: 待转换的原始内容数据
//原进制: 原始内容的进制, 例如10, 16等
//新进制: 要转换到的目标进制, 例如2, 32等
//返回: 得到转换后的字符串内容
Function zmConvBase(原内容, 原进制, 新进制)
Dim digits, num, ptr, i, n, c
digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

If 原进制 < 2 Or 原进制 > 62 Then
MsgBox "错误: 原进制范围必须在2到62之间", vbExclamation + vbSystemModal, "错误进制"
End If

If 新进制 < 2 Or 新进制 > 62 Then
MsgBox "错误: 新进制范围必须在2到62之间", vbExclamation + vbSystemModal, "错误进制"
End If

原内容 = CStr(原内容) : n = Len(原内容)

For i = 1 To n
c = Mid(原内容, i, 1)

If c >= "0" And c <= "9" Then
c = c - "0"
ElseIf c >= "A" And c <= "Z" Then
If 原进制 <= 36 and 新进制 <= 36 Then
c = Asc(c) - Asc("A") + 10
else
c = Asc(c) - Asc("A") + 36
End If
ElseIf c >= "a" And c <= "z" Then
c = Asc(c) - Asc("a") + 10
Else
c = 原进制
End If

If c < 原进制 Then
num = num * 原进制 + c
End If
Next

Do
ptr = ptr & Mid(digits, (num Mod 新进制 + 1), 1)
num = num \ 新进制
Loop While num

zmConvBase = StrReverse(ptr)
End Function

//将内容ffff从16进制转换为10进制, 得到字符串结果
TracePrint zmConvBase("ffff", 16, 10)

备注

  • 您可以通过在数字前面添加前缀 &H 来表示十六进制数。例如,在十六进制计数法中,&H10 表示十进制数 16
  • 平时使用&当做连接符时, 前后最好加空格, 避免与h字符连接被误认为是十六进制内容
  • 与进制有关的还要一个函数 Oct 转八进制