VBA 中如何把数字转换为十六进制的数字,如15,怎...
下面程序,当Mydec =9 时(转换后不包含A--F),则TransftoHEX 数值类型为数字,但Mydec =15 时,TransftoHEX 数值类型自动为STRING 型。有没办法把15转为数字形式的HEX?
Private Sub CommandButton1_Click()
Dim MYdec As Long
'Dim TransToHex As long' 如果转换后的数字包含A...F 将报数据类型不匹配错误
Dim TransToHex As Variant
Dim MYhexToDec As Variant
MYdec = 15
TransToHex = Hex(MYdec)
MYhexToDec = Val(TransToHex)
End Sub
如下:
只需要把你程序中的:
MYhexToDec = Val(TransToHex)
改为:
MYhexToDec = Application.Hex2Dec(TransToHex)
即可。 计算机中的数字格式有定点浮点整形等,没有进制的,或者说目前都是用二进制处理;
通常所谓的二进制,十进制,十六进制都是字符串 本帖最后由 wangjiati 于 2017-3-22 10:08 编辑
Private Function myMod(a As Variant, b As Integer) As Integer
Dim I As Integer
For I = 1 To Len(a)
If I = 1 Then
myMod = CInt(Mid(a, I, 1)) Mod b
Else
myMod = (myMod * 10 + CInt(Mid(a, I, 1))) Mod b
End If
Next
End Function
Public Function CHANGE_10TO36(number As Variant) As String
Dim remainder As Variant
Dim a As Variant
Dim result As String
If number >= 1 Then
table_36 = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", _
"G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
a = Fix(number / 36)
remainder = myMod(number, 36)
result = table_36(remainder) & result
Do While a >= 36
remainder = myMod(a, 36)
result = table_36(remainder) & result
a = Fix(a / 36)
Loop
If a > 0 Then
a = Fix(a)
result = table_36(a) & result
End If
CHANGE_10TO36 = result
Else
CHANGE_10TO36 = 0
End If
End Function
=DEC2HEX(C9)//16进制自带函数 GoingDown 发表于 2017-3-22 09:29
如下:
只需要把你程序中的:
MYhexToDec = Val(TransToHex)
对的,是这样,谢谢
还有个问题请教下,当需要转换的十进制是正数时,得到的16进制字符串是8 位,但为负数时,是10位的长度。
如下:
Dim Target_inc As Variant
Dim Target_inc_HEX As Variant
Target_inc_HEX = Application.WorksheetFunction.Dec2Hex(Target_inc_Dec, 8)
Target_inc_Dec=-10 时. Target_inc_HEX =“FFFFFFFFF6” --------10 位
Target_inc_Dec=10 时. Target_inc_HEX =“00000006” -------8 位
因为要用下面的函数把两位两位分开,如果是8位,刚好4组,可负数出来10位,怎么弄?
Target_inc_HEX_Seperated(0) = Mid(Target_inc_HEX, 7, 2)
Target_inc_HEX_Seperated(1) = Mid(Target_inc_HEX, 5, 2)
Target_inc_HEX_Seperated(2) = Mid(Target_inc_HEX, 3, 2)
Target_inc_HEX_Seperated(3) = Mid(Target_inc_HEX, 1, 2) TigerFish 发表于 2017-3-22 13:04
对的,是这样,谢谢
还有个问题请教下,当需要转换的十进制是正数时,得到的16进制字符串是8 位,但为负 ...
我也不知道VBA的负数怎么用这种表示方法,即然负数这种形式,你可以把正数指定为负数同样的长度, Dec2Hex(postive_num,10). 这样的话,你就可以统一用Mid处理了,下标从2开始。
页:
[1]