Visual Basic -Hex,Dec,Bin
2 отговора
0 прегледа
Visual Basic -Hex,Dec,Bin
здравейте
Въвеждам програма, при която се правят преобразувания от шестднадесетични в двуични в десетични и подобни комбинации за изготвяне на програма, която да дава готови изчисления на една задача.
За целта съм изтеглил готов модул с всички възможни комбинации.
Обаче след извличане шестнадесетично число(декларирано като String) въведено в TexBox, при извикването на подпрограмата за преобразуването му в десетично дава следната грешка ByRef argument type mismatch
Въвеждам програма, при която се правят преобразувания от шестднадесетични в двуични в десетични и подобни комбинации за изготвяне на програма, която да дава готови изчисления на една задача.
За целта съм изтеглил готов модул с всички възможни комбинации.
Обаче след извличане шестнадесетично число(декларирано като String) въведено в TexBox, при извикването на подпрограмата за преобразуването му в десетично дава следната грешка ByRef argument type mismatch
Re: Visual Basic -Hex,Dec,Bin
Ами, най-вероятно функцията очаква друг тип на параметъра, който трябва да подадеш. Дай сорса насам, ще го погледнем.
В смисъл, ако функцията трябва да се вика така:
intDec = Hex2Dec(strHex)
... то ако strHex се прочита от текстово поле, и е стринг, значи, че и самата функция трябва да очаква стринг. Ако е написана така, че очаква някакъв друг тип данна - трябва да се види как да бъде преработена.
Ето аз как обръщам числа от десетично в шестнадесетично и обратно:
Т.е. обърни внимание на тази част:
CDbl("&H" & Text2.Text)
На функцията за конвертиране подавам стринг, пред който слагам "&H", който стринг вече функцията може да го "разпознае", че е шестнадесетично число. Или поне така си мисля. ;о) За двоични - не си правя труда да правя сложни цикли и алгоритми за разделяне и изваждане. Просто преобразувам нужното ми число до шестнадесетичен формат, и после замествам получените символи в стринга съответно така:
0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
A = 1010
B = 1011
C = 1100
D = 1101
E = 1110
F = 1111
Това може да се направи с една малка функция, на която да подадеш стринг (шестнадесетично число), и да върне също такъв стринг като двоично, което е 4 пъти по-дълго като символи. Иначе ако почнеш от десетично в двоично - много деления на степените на две трябва да се правят.
Ето и функция:
Щирлиц
В смисъл, ако функцията трябва да се вика така:
intDec = Hex2Dec(strHex)
... то ако strHex се прочита от текстово поле, и е стринг, значи, че и самата функция трябва да очаква стринг. Ако е написана така, че очаква някакъв друг тип данна - трябва да се види как да бъде преработена.
Ето аз как обръщам числа от десетично в шестнадесетично и обратно:
Private Sub Command1_Click()
'От десетично към шестнадесетично
Text2.Text = Hex(Text1.Text)
End Sub
Private Sub Command2_Click()
'От шестнадесетично към десетично
Text1.Text = CDbl("&H" & Text2.Text)
End Sub
Т.е. обърни внимание на тази част:
CDbl("&H" & Text2.Text)
На функцията за конвертиране подавам стринг, пред който слагам "&H", който стринг вече функцията може да го "разпознае", че е шестнадесетично число. Или поне така си мисля. ;о) За двоични - не си правя труда да правя сложни цикли и алгоритми за разделяне и изваждане. Просто преобразувам нужното ми число до шестнадесетичен формат, и после замествам получените символи в стринга съответно така:
0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
A = 1010
B = 1011
C = 1100
D = 1101
E = 1110
F = 1111
Това може да се направи с една малка функция, на която да подадеш стринг (шестнадесетично число), и да върне също такъв стринг като двоично, което е 4 пъти по-дълго като символи. Иначе ако почнеш от десетично в двоично - много деления на степените на две трябва да се правят.
Ето и функция:
Private Sub Command3_Click()
MsgBox Hex2Bin(Text2.Text)
End Sub
Private Function Hex2Bin(strHex As String) As String
For s = 1 To Len(strHex)
Select Case UCase(Mid(strHex, s, 1))
Case "0": Hex2Bin = Hex2Bin & "0000"
Case "1": Hex2Bin = Hex2Bin & "0001"
Case "2": Hex2Bin = Hex2Bin & "0010"
Case "3": Hex2Bin = Hex2Bin & "0011"
Case "4": Hex2Bin = Hex2Bin & "0100"
Case "5": Hex2Bin = Hex2Bin & "0101"
Case "6": Hex2Bin = Hex2Bin & "0110"
Case "7": Hex2Bin = Hex2Bin & "0111"
Case "8": Hex2Bin = Hex2Bin & "1000"
Case "9": Hex2Bin = Hex2Bin & "1001"
Case "A": Hex2Bin = Hex2Bin & "1010"
Case "B": Hex2Bin = Hex2Bin & "1011"
Case "C": Hex2Bin = Hex2Bin & "1100"
Case "D": Hex2Bin = Hex2Bin & "1101"
Case "E": Hex2Bin = Hex2Bin & "1110"
Case "F": Hex2Bin = Hex2Bin & "1111"
End Select
Next
End Function
Щирлиц