CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

大伙快来看看这个简单的函数!!!!(为什么实现不了?)

楼主whoamiyxzh(印相纸)2002-05-21 09:53:44 在 VB / 基础类 提问

这个函数实现的功能是将一个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

相关问题

  • 困惑 一个简单函数的实现
  • 简单问题,如何实现象vb的mid函数功能?急!!
  • 简单的函数问题。
  • >>>>>>>简单问题SendMessage函数
  • 一个简单的函数
  • 简单的sql函数
  • 函数简单问题
  • 求一函数?(简单)
  • 求一个简单函数?
  • 函数识别的实现???

关键词

  • 算法
  • 余数
  • stri
  • 除以
  • hb
  • asc
  • 进制数
  • str
  • val
  • mod

得分解答快速导航

  • 帖主:whoamiyxzh
  • daviddivad
  • fuxc
  • zyl910
  • topikachu

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo