请教关于2进制转换16进制的问题,高手请进……
我在开发的时候遇到外部硬件需要2进制数(共8位)来控制,但软件本身返回的是16进制的,想请问一下,怎么才能把16进制转换成2进制呢?急等!!
[解决办法]
如下是24位二进制数据转换为16进制的函数:
Public Function bin_hex()
'2-16转换
bb_h(6) = fasong(31) & fasong(30) & fasong(29) & fasong(28)
bb_h(7) = fasong(27) & fasong(26) & fasong(25) & fasong(24)
bb_h(0) = fasong(23) & fasong(22) & fasong(21) & fasong(20)
bb_h(1) = fasong(19) & fasong(18) & fasong(17) & fasong(16)
bb_h(2) = fasong(15) & fasong(14) & fasong(13) & fasong(12)
bb_h(3) = fasong(11) & fasong(10) & fasong(9) & fasong(8)
bb_h(4) = fasong(7) & fasong(6) & fasong(5) & fasong(4)
bb_h(5) = fasong(3) & fasong(2) & fasong(1) & fasong(0)
For i = 0 To 7
If bb_h(i) = "1111 " Then
bb_hh(i) = "F "
ElseIf bb_h(i) = "1110 " Then
bb_hh(i) = "E "
ElseIf bb_h(i) = "1101 " Then
bb_hh(i) = "D "
ElseIf bb_h(i) = "1100 " Then
bb_hh(i) = "C "
ElseIf bb_h(i) = "1011 " Then
bb_hh(i) = "B "
ElseIf bb_h(i) = "1010 " Then
bb_hh(i) = "A "
ElseIf bb_h(i) = "1001 " Then
bb_hh(i) = "9 "
ElseIf bb_h(i) = "1000 " Then
bb_hh(i) = "8 "
ElseIf bb_h(i) = "0111 " Then
bb_hh(i) = "7 "
ElseIf bb_h(i) = "0110 " Then
bb_hh(i) = "6 "
ElseIf bb_h(i) = "0101 " Then
bb_hh(i) = "5 "
ElseIf bb_h(i) = "0100 " Then
bb_hh(i) = "4 "
ElseIf bb_h(i) = "0011 " Then
bb_hh(i) = "3 "
ElseIf bb_h(i) = "0010 " Then
bb_hh(i) = "2 "
ElseIf bb_h(i) = "0001 " Then
bb_hh(i) = "1 "
ElseIf bb_h(i) = "0000 " Then
bb_hh(i) = "0 "
End If
Next i
fa1 = bb_hh(6) & bb_hh(7) & bb_hh(0) & bb_hh(1) & bb_hh(2) & bb_hh(3) & bb_hh(4) & bb_hh(5)
Text4 = fa1
End Function
如下是16进制数据转换为2进制的函数
Private Function hex_bin1()
'16-2转换
For i = 1 To 6
cclG(i) = Mid(blLg, i, 1)
If cclG(i) > = Chr(48) And cclG(i) <= Chr(57) Or cclG(i) > = Chr(65) And cclG(i) <= Chr(70) Then
cclG(i) = cclG(i)
Else
Exit Function '退出过程函数
End If
Next i
For j = 1 To 6
blg = cclG(j)
If blg = "F " Then
blg_dm = "1111 "
ElseIf blg = "E " Then
blg_dm = "1110 "
ElseIf blg = "D " Then
blg_dm = "1101 "
ElseIf blg = "C " Then
blg_dm = "1100 "
ElseIf blg = "B " Then
blg_dm = "1011 "
ElseIf blg = "A " Then
blg_dm = "1010 "
ElseIf blg = "9 " Then
blg_dm = "1001 "
ElseIf blg = "8 " Then
blg_dm = "1000 "
ElseIf blg = "7 " Then
blg_dm = "0111 "
ElseIf blg = "6 " Then
blg_dm = "0110 "
ElseIf blg = "5 " Then
blg_dm = "0101 "
ElseIf blg = "4 " Then
blg_dm = "0100 "
ElseIf blg = "3 " Then
blg_dm = "0011 "
ElseIf blg = "2 " Then
blg_dm = "0010 "
ElseIf blg = "1 " Then
blg_dm = "0001 "
ElseIf blg = "0 " Then
blg_dm = "0000 "
Else:
blg_dm = " "
End If
cclLg(j) = blg_dm
Next j
ztG_dm1 = cclLg(1) + cclLg(2) + cclLg(3) + cclLg(4) + cclLg(5) + cclLg(6)
Text5 = ztG_dm1
End Function
以上代码都为实用的工控机的2-16和16-2的进制转换函数,你可修改后用于你的需要,我是解决24设备状态的转换用的.
[解决办法]
'16进制数转为二进制需通过编程解决 , 以下给出VB的代码:
Option Explicit
Dim bl As String * 1
Dim ccl(3) As String
Dim ccll(3) As String
Dim bl_dm As String
Dim zt_dm1 As String
Dim I As Integer
Dim j As Integer
Dim bll As String
Private Sub Command1_Click()
bll = InputBox( "输入16进制数 ")
Call hex_bin
End Sub
Public Function hex_bin()
For I = 1 To 2
ccl(I) = Mid(bll, I, 1)
Next I
For j = 1 To 2
bl = ccl(j)
If bl = "F " Then
bl_dm = "1111 "
ElseIf bl = "E " Then
bl_dm = "1110 "
ElseIf bl = "D " Then
bl_dm = "1101 "
ElseIf bl = "C " Then
bl_dm = "1100 "
ElseIf bl = "B " Then
bl_dm = "1011 "
ElseIf bl = "A " Then
bl_dm = "1010 "
ElseIf bl = "9 " Then
bl_dm = "1001 "
ElseIf bl = "8 " Then
bl_dm = "1000 "
ElseIf bl = "7 " Then
bl_dm = "0111 "
ElseIf bl = "6 " Then
bl_dm = "0110 "
ElseIf bl = "5 " Then
bl_dm = "0101 "
ElseIf bl = "4 " Then
bl_dm = "0100 "
ElseIf bl = "3 " Then
bl_dm = "0011 "
ElseIf bl = "2 " Then
bl_dm = "0010 "
ElseIf bl = "1 " Then
bl_dm = "0001 "
ElseIf bl = "0 " Then
bl_dm = "0000 "
Else:
bl_dm = " "
End If
ccll(j) = bl_dm
Next j
zt_dm1 = ccll(1) + ccll(2) ' + ccll(3) + ccll(4)
Text1 = zt_dm1
End Function