大伙快来看看这个简单的函数!!!!(为什么实现不了?)
这个函数实现的功能是将一个16进制数转化为2进制数.具体的算法是:如:
给你一个16进制数D,我首先将它化成10进制数--> 13
再,13/2=6....1 ---> 13除以2 ,商是6,余数是1
6/2=3....0 ---> 6除以2,商是3,余数是0
3/2=1....1 ---> 3除以2,商是1,余数是1
1/2=0....1 ---> 1除以2,商是0,余数是1
那我就可以得到D可以用四位2进制表示:1101(将所有的余数倒过来)
Public Function hb(ByRef stri As String)
Dim s As Integer
Dim str As Integer
str = Val("&H" + stri)
Do While str = 0
s=cstr(str mod 2)
Do while str=0
s=cstr(str mod 2)+s
Loop
str = Fix(str / 2)
Loop
ht = s
Exit function
End function
Exit Function
End Function
问题点数:50、回复次数:15Top
1 楼tony_jian(晕了)回复于 2002-05-21 10:06:13 得分 0
str = Val("&H" + stri)!!!!!!??????Top
2 楼daviddivad(你真行,居然比我还快! Scorpio)回复于 2002-05-21 10:09:31 得分 20
public function hb(byref stri as string)
dim s as integer
dim ret as string
dim str as integer
str=val("&H" & stri)
do while str>0
s= str mod 2
str=str\2
ret=s & ret
loop
stri=ret
end function
Top
3 楼softrain(曾经的月光,现在的日光)回复于 2002-05-21 10:10:02 得分 0
不错,新颖。Top
4 楼fuxc(Michael(继续迷茫))回复于 2002-05-21 10:20:23 得分 10
Option Explicit
Private Function cBit(ByVal Number As Long) As String
Dim N1 As Long, N2 As Long
Dim I As Integer
cBit = ""
N1 = Number
I = 0
N2 = 2 ^ I
While N2 <= N1
If N1 And N2 Then
cBit = "1" & cBit
Else
cBit = "0" & cBit
End If
I = I + 1
N2 = 2 ^ I
Wend
End Function
Private Sub Command1_Click()
MsgBox cBit(&HE2)
MsgBox cBit(&HAD)
End Sub
Top
5 楼fuxc(Michael(继续迷茫))回复于 2002-05-21 10:20:45 得分 0
Option Explicit
Private Function cBit(ByVal Number As Long) As String
Dim N1 As Long, N2 As Long
Dim I As Integer
cBit = ""
N1 = Number
I = 0
N2 = 2 ^ I
While N2 <= N1
If N1 And N2 Then
cBit = "1" & cBit
Else
cBit = "0" & cBit
End If
I = I + 1
N2 = 2 ^ I
Wend
End Function
Private Sub Command1_Click()
MsgBox cBit(&HE2)
MsgBox cBit(&HAD)
End Sub
Top
6 楼zhangyan_qd(doggyzone)回复于 2002-05-21 11:02:13 得分 0
不会吧大哥,十六进制转二进制用8421一套就出来了,还转10进制不是脱了裤子放屁么?Top
7 楼zhangyan_qd(doggyzone)回复于 2002-05-21 11:07:55 得分 0
dim Mask as Variant
Mask=array("0000","0001","0002",...,"1111") '16个
for i=1 to len(str)
binStr =binStr+Mask(Asc(mid(str,i,1)-Asc("A"))
next i
搞定(我没调试啊,可能有错误)Top
8 楼qbilbo(风之兄)回复于 2002-05-21 11:44:20 得分 0
同意zhangyan_qd(doggyzone)
去看看书,为什么会有十六进制吧。Top
9 楼txs()回复于 2002-05-21 12:12:13 得分 0
呵呵
太麻烦了
直接用位(Bit)比较一下就出来了。
看来阁下的计算机基础不行,是不是半路出家的 :)
Top
10 楼whoke(hy)回复于 2002-05-21 12:25:02 得分 0
to zhangyan_qd(doggyzone) :
人家是输入16禁止的字符串Top
11 楼wwfang(晴天)回复于 2002-05-21 12:26:09 得分 0
同意zhangyan_qd(doggyzone)
我刚学编程时也来过这一手(不好意思),不过现在可不干了。Top
12 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2002-05-21 12:53:14 得分 10
进制转化相关贴子:
http://www.csdn.net/expert/topic/702/702004.xml?temp=.5143549
http://www.csdn.net/expert/topic/670/670623.xml?temp=.1453516
http://www.csdn.net/expert/topic/669/669329.xml?temp=.7846186
http://www.csdn.net/expert/topic/668/668288.xml?temp=.5115167
http://www.csdn.net/expert/topic/661/661706.xml?temp=.4214899
http://www.csdn.net/expert/topic/658/658476.xml?temp=.3378717
http://www.csdn.net/expert/topic/657/657002.xml?temp=.3998529
http://www.csdn.net/expert/topic/635/635224.xml?temp=.7371942
http://www.csdn.net/expert/topic/631/631897.xml?temp=6.342715E-02
Top
13 楼topikachu(皮皮)回复于 2002-05-21 13:04:49 得分 10
Function Hex2Bin(ByVal strHex As String) As String
Dim lngIn As Long
Dim strOut As String
Dim i As Long
lngIn = CInt("&H" & strHex)
For i = 0 To Int(Log(lngIn) / Log(2))
If (lngIn And 2 ^ i) = 2 ^ i Then
strOut = "1" & strOut
Else
strOut = "0" & strOut
End If
Next
Hex2Bin = strOut
End Function
Top
14 楼zhangyan_qd(doggyzone)回复于 2002-05-22 16:27:09 得分 0
昨天贴的程序有误,后来又莫名其妙被删掉了。楼主和我讨论:输入大于16的十六进制怎么办。OK,看看这次的程序是不是正确。
Public Function hb(ByRef stri As String)
dim MASK as Variant
MASK=array("0000","0001","0010"....."1111") '一共16个
for i=1 to len(stri)
ch = mid(stri,i,1)
in = asc(ch)
if in>asc("9") then '偷懒,这里不作语法检查了,而且9的ASCII码也忘了,还假设所有的ABCDE都是大写,如果包括小写就再转一次
in=in-asc("A")
else
in=in-asc("0")
end if
hb= hb & MASK(in)
next i
end function
忘记谁说的了,所有算法里最快的就是查表
昨天的帖子说话不太客气,这里一并道歉。Top
15 楼zhangyan_qd(doggyzone)回复于 2002-05-22 16:32:38 得分 0
又错了,中间那一行应该是
in = in -asc("A")+10
反正就是看个意思,大家不会太介意吧?
有好多问题可以优化,比如一开始那个Array,我的意思是设一个常量数组,不过VB没有什么好方法(以前READ/DATA的好传统都丢了)。这里也没有语法检查、没有边界检查,不算一个好程序。只是演示一个想法(连算法也谈不上),大家研究研究,何必当真呢:)
Top
16 楼greenpean(dj)回复于 2002-05-22 16:34:15 得分 0
着位老兄一看就是冒学过汇编抑或是计算机组成原理!找这方面的书看一下吧!!!Top




