实用的进制转换
我这里有进制之间的互转代码,需要的朋友可以看看,有不足之处请指正哈!
如下图所见,你值得拥有!!
Imports System
Imports System.Text
Public Class Form1
Private _left As String
Private _right As String
Private Property Left(b As String, p2 As Integer) As String
Get
Return _left
End Get
Set(value As String)
_left = value
End Set
End Property
Private Property Right(b As String, p2 As Integer) As String
Get
Return _right
End Get
Set(value As String)
_right = value
End Set
End Property
'二进制转十进制
Public Function BtoD(ByVal vBstr As String) As String
Dim vLen As Integer '串长
Dim vDec As Single = 0 '结果
Dim vI As Long '位数
Dim vTmp As String '中间值
Dim vN As Long '判断是否输入1 or 0
vLen = Len(vBstr)
For vI = 1 To vLen
vTmp = Mid(vBstr, vI, 1) '取出当前位
vN = Val(vTmp)
If vN < 2 And vN > -1 Then
Else
BtoD = "erro"
Exit Function
End If
Next
Dim aa As String = CStr(Convert.ToInt32(vBstr, 2))
BtoD = aa
End Function
'十进制转二进制
Public Function DtoB(ByVal Dec As Long) As String
DtoB = ""
Try
Do While Dec > 0
DtoB = Dec Mod 2 & DtoB
Dec = Dec \ 2
Loop
Catch ex As Exception
End Try
End Function
' 将十进制转化为八进制
Public Function DtoO(ByVal Dec As Long) As String
DtoO = ""
If Dec >= 0 Then
Do While Dec > 0
DtoO = Dec Mod 8 & DtoO
Dec = Dec \ 8
Loop
Else
DtoO = "请输入正整数"
End If
End Function
'将八进制转化为十进制
Public Function OtoD(ByVal Oct As String) As Long
Dim i As Long
Dim value As Long
If Oct >= 0 Then
For i = 1 To Len(Oct)
Select Case Mid(Oct, Len(Oct) - i + 1, 1)
Case "0" : value = value + 8 ^ (i - 1) * 0
Case "1" : value = value + 8 ^ (i - 1) * 1
Case "2" : value = value + 8 ^ (i - 1) * 2
Case "3" : value = value + 8 ^ (i - 1) * 3
Case "4" : value = value + 8 ^ (i - 1) * 4
Case "5" : value = value + 8 ^ (i - 1) * 5
Case "6" : value = value + 8 ^ (i - 1) * 6
Case "7" : value = value + 8 ^ (i - 1) * 7
Case Else : value = -1
End Select
Next i
End If
OtoD = value
End Function
'将十进制转化为十六进制
Public Function DtoH(Dec As Long) As String
Dim a As String
DtoH = ""
Do While Dec > 0
a = CStr(Dec Mod 16)
Select Case a
Case "10" : a = "A"
Case "11" : a = "B"
Case "12" : a = "C"
Case "13" : a = "D"
Case "14" : a = "E"
Case "15" : a = "F"
'Case Else : a = "erro"
End Select
DtoH = a & DtoH
Dec = Dec \ 16
Loop
End Function
'将十六进制转化为十进制
Public Function HtoD(ByVal Hex As String) As String
Dim i As Long
Dim value As Long
Hex = UCase(Hex)
For i = 1 To Len(Hex)
Select Case Mid(Hex, Len(Hex) - i + 1, 1)
Case "0" : value = value + 16 ^ (i - 1) * 0
Case "1" : value = value + 16 ^ (i - 1) * 1
Case "2" : value = value + 16 ^ (i - 1) * 2
Case "3" : value = value + 16 ^ (i - 1) * 3
Case "4" : value = value + 16 ^ (i - 1) * 4
Case "5" : value = value + 16 ^ (i - 1) * 5
Case "6" : value = value + 16 ^ (i - 1) * 6
Case "7" : value = value + 16 ^ (i - 1) * 7
Case "8" : value = value + 16 ^ (i - 1) * 8
Case "9" : value = value + 16 ^ (i - 1) * 9
Case "A" : value = value + 16 ^ (i - 1) * 10
Case "B" : value = value + 16 ^ (i - 1) * 11
Case "C" : value = value + 16 ^ (i - 1) * 12
Case "D" : value = value + 16 ^ (i - 1) * 13
Case "E" : value = value + 16 ^ (i - 1) * 14
Case "F" : value = value + 16 ^ (i - 1) * 15
Case Else : value = -1
End Select
Next i
HtoD = Str(value)
End Function
'将十六进制转化为二进制
Public Function HtoB(ByVal Hex As String) As String
Dim i As Long
Dim value As String
Hex = UCase(Hex)
For i = 1 To Len(Hex)
Select Case Mid(Hex, i, 1)
Case "0" : value = value & "0000"
Case "1" : value = value & "0001"
Case "2" : value = value & "0010"
Case "3" : value = value & "0011"
Case "4" : value = value & "0100"
Case "5" : value = value & "0101"
Case "6" : value = value & "0110"
Case "7" : value = value & "0111"
Case "8" : value = value & "1000"
Case "9" : value = value & "1001"
Case "A" : value = value & "1010"
Case "B" : value = value & "1011"
Case "C" : value = value & "1100"
Case "D" : value = value & "1101"
Case "E" : value = value & "1110"
Case "F" : value = value & "1111"
Case Else : value = "erro"
End Select
Next i
While Left(value, 1) = "0"
value = Right(value, Len(value) - 1)
End While
HtoB = value
End Function
'将二进制转化为十六进制
Public Function BtoH(ByVal Bin As String) As String
Dim i As Long
Dim H As String = ""
If Len(Bin) Mod 4 <> 0 Then
Bin = Strget(4 - Len(Bin) Mod 4, "0") & Bin
End If
For i = 1 To Len(Bin) Step 4
Select Case Mid(Bin, i, 4)
Case "0000" : H = H & "0"
Case "0001" : H = H & "1"
Case "0010" : H = H & "2"
Case "0011" : H = H & "3"
Case "0100" : H = H & "4"
Case "0101" : H = H & "5"
Case "0110" : H = H & "6"
Case "0111" : H = H & "7"
Case "1000" : H = H & "8"
Case "1001" : H = H & "9"
Case "1010" : H = H & "A"
Case "1011" : H = H & "B"
Case "1100" : H = H & "C"
Case "1101" : H = H & "D"
Case "1110" : H = H & "E"
Case "1111" : H = H & "F"
Case Else
H = "erro"
End Select
Next i
While Left(H, 1) = "0"
H = Right(H, Len(H) - 1)
End While
BtoH = H
End Function
Public Function Strget(ByVal nub As Long, ByVal str0 As String) As String
Dim i As Long
Dim str1 As String = ""
For i = 0 To nub - 1 Step 1
str1 = str1 & str0
Next
Strget = str1
End Function
'将二进制转化为八进制
Public Function BtoO(ByVal Bin As String) As String
Dim i As Long
Dim H As String = ""
If Len(Bin) Mod 3 <> 0 Then
Bin = Strget(3 - Len(Bin) Mod 3, "0") & Bin '位数用0补齐
End If
For i = 1 To Len(Bin) Step 3
Select Case Mid(Bin, i, 3)
Case "000" : H = H & "0"
Case "001" : H = H & "1"
Case "010" : H = H & "2"
Case "011" : H = H & "3"
Case "100" : H = H & "4"
Case "101" : H = H & "5"
Case "110" : H = H & "6"
Case "111" : H = H & "7"
Case Else
H = "erro"
End Select
Next i
While Left(H, 1) = "0"
H = Right(H, Len(H) - 1)
End While
BtoO = H
End Function
'将八进制转化为二进制
Public Function OtoB(ByVal Oct As String) As String
Dim i As Long
Dim b As String
For i = 1 To Len(Oct)
Select Case Mid(Oct, i, 1)
Case "0" : b = b & "000"
Case "1" : b = b & "001"
Case "2" : b = b & "010"
Case "3" : b = b & "011"
Case "4" : b = b & "100"
Case "5" : b = b & "101"
Case "6" : b = b & "110"
Case "7" : b = b & "111"
Case Else : b = "erro"
End Select
Next i
While Left(b, 1) = "0"
b = Right(b, Len(b) - 1)
End While
OtoB = b
End Function
'将八进制转化为十六进制
Public Function OtoH(ByVal Oct As String) As String
Dim Bin As String
Bin = OtoB(Oct)
OtoH = BtoH(Bin)
End Function
'将十六进制转化为八进制
Public Function HtoO(ByVal Hex As String) As String
Dim Bin As String
Hex = UCase(Hex)
Bin = HtoB(Hex)
HtoO = BtoO(Bin)
End Function
'十六进制转ASC字符
Function HtoA(InputData As String) As String
Dim mydata
mydata = Chr(Val("&H" & InputData))
HtoA = mydata
Exit Function
End Function
'ASCII字符串转16进制字符串
Public Function AtoH(ByVal str As String) As String
Dim strlen As Integer
Dim i As Integer
Dim mystr As String
mystr = ""
strlen = Len(str)
For i = 1 To strlen Step 1
mystr = mystr + Hex$(Asc(Mid(str, i, 1)))
Next i
AtoH = mystr
End Function
'ASCII码转BCD-8421
'Public Function A2B(str As String) As Object
' Dim a() As Byte, s As String
' s = str
' a = StrConv(s, vbFromUnicode) '字符串转换为byte型 'a 是byte数组,你可以在程序中调用 ,但不能在textbox中显示。
' A2B = a
'End Function
'二进制流转ASCII码值 :: 二进制转为十进制再转为ascii字符,再转为ascii码值
Public Function BtoA(ByVal unicodeString As String) As String
Dim btodString As String = BtoD(unicodeString)
Dim asciiString As String
asciiString = Chr(btodString) '转为ascii字符
BtoA = Asc(asciiString) '转为ascii值
End Function
Public SelectThings As String '选择选项全局变量
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim vbS As String = TextBox1.Text
'MsgBox(BtoD(vbS))'二进制转十进制
'MsgBox(DtoB(vbS)) '十进制转二进制
'If SelectThings = "二进制转十进制" Then
' 'MsgBox("转换成功")
' TextBox2.Text = BtoD(vbS)
'End If
Select Case SelectThings
Case "二进制转八进制" : TextBox2.Text = BtoO(vbS)
Case "二进制转十进制" : TextBox2.Text = BtoD(vbS)
Case "二进制转十六进制" : TextBox2.Text = BtoH(vbS)
Case "二进制流转ASCII码" : TextBox2.Text = BtoA(vbS)
Case "八进制转二进制" : TextBox2.Text = OtoB(vbS)
Case "八进制转十进制" : TextBox2.Text = OtoD(vbS)
Case "八进制转十六进制" : TextBox2.Text = OtoH(vbS)
Case "十进制转二进制" : TextBox2.Text = DtoB(vbS)
Case "十进制转八进制" : TextBox2.Text = DtoO(vbS)
Case "十进制转十六进制" : TextBox2.Text = DtoH(vbS)
Case "十六进制转二进制" : TextBox2.Text = HtoB(vbS)
Case "十六进制转八进制" : TextBox2.Text = HtoO(vbS)
Case "十六进制转十进制" : TextBox2.Text = HtoD(vbS)
Case "ASCII字符串转16进制字符串" : TextBox2.Text = AtoH(vbS)
Case "十六进制转ASC字符" : TextBox2.Text = HtoA(vbS)
End Select
'MsgBox(BtoO(vbS))
End Sub
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim i As Integer
i = ComboBox1.SelectedIndex
SelectThings = ComboBox1.Items(i)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ComboBox1.Items.Add("二进制转八进制")
ComboBox1.Items.Add("二进制流转ASCII码")
ComboBox1.Items.Add("二进制转十进制")
ComboBox1.Items.Add("二进制转十六进制")
ComboBox1.Items.Add("八进制转二进制")
ComboBox1.Items.Add("八进制转十进制")
ComboBox1.Items.Add("八进制转十六进制")
ComboBox1.Items.Add("十进制转二进制")
ComboBox1.Items.Add("十进制转八进制")
ComboBox1.Items.Add("十进制转十六进制")
ComboBox1.Items.Add("十六进制转二进制")
ComboBox1.Items.Add("十六进制转八进制")
ComboBox1.Items.Add("十六进制转十进制")
ComboBox1.Items.Add("ASCII字符串转16进制字符串")
ComboBox1.Items.Add("十六进制转ASC字符")
End Sub
End Class