旅游seo整站优化,上饶网站建设企业,上海新闻官网,90后做网站月入万元发信人: zkboy (小小鸟), 信区: VisualBasic 标 题: Re: 请教#xff1a;如何在VB中实现16进制数或10进制数与2进制#xfffd;发信站: BBS 水木清华站 (Thu Jun 15 19:39:37 2000)转一篇相关资料在编程中#xff0c;我们经常使用二进制(binary)、八进制(octal)、十进…发信人: zkboy (小小鸟), 信区: VisualBasic 标 题: Re: 请教如何在VB中实现16进制数或10进制数与2进制发信站: BBS 水木清华站 (Thu Jun 15 19:39:37 2000)转一篇相关资料在编程中我们经常使用二进制(binary)、八进制(octal)、十进制(decimal)和十六进制(hexadecimal)来表示一个数据除二进制可表示大部分数据外我们一般用其他的进制来表示整型数。它们之间的转换有时显得非常重要但VB本身提供的转换函数很少。这样就需要我们根据VB程序的特点自己来设计转换函数。以下向大家介绍几种转换方法虽然不能放之四海皆准瑾希望能激发您的思路。一、VB提供的进制转换函数1、Hex(x)返回十六进制数值的String类型注意(1)其返回的是String类型(2)函数返回值最多是8个十六进制字符(3)x为整数如果x不是整数将先被四舍五入成最接近的整数。2、Oct(x)返回八进制数值的 Variant(String)类型注意(2)函数返回值最多是11个八进制字符(3)x为整数如果x不是整数将先被四舍五入成最接近的整数。VB只有这两个进制转换函数。二、自己设计转换函数1、十六进制 - 十进制 lngDec CLng(H strHex)你看仅这么一个表达式就能完成转换。为什么用Clng( )而不用Val( )这只是为了避免数值范围的限制。2、八进制 - 十进制 提示VB中八进制数以O为前缀通过上面您一定能写出转换表达式。3、十六进制 - 二进制 Function Hex2Bin(HexValue As String) As StringConst BinIndexTable 0000000100100011010001010110011110001001101010111100110111101111Dim n As IntegerDim Tmp As StringTmp For n 1 To Len(HexValue)Tmp Tmp Mid(BinIndexTable, _(Val(H Mid(HexValue, n, 1) - 1) * 4 1), 4)NextHex2Bin TmpEnd Function我们知道1位十六进制数代表4位二进制。这里用到一个索引表BinIndexTable经过对给定的十六进制数逐位分离、检索索引表、转换、合并就可以得到结果。和前面的转换比较这里用到了Val( )函数因为保证的前提是1位十六进制最大表示为十进制的15。是看起来这种方法很原始但它是最简便的并且运行速度最快。4、用两个函数来完成各种进制间的转换Function ConvertBase(NumValue As String, BaseFrom As Integer, BaseTo As Integer) _As String转换一个数值(NumValue)从一种进制(BaseFrom)到另一种进制(BaseTo)用一个整数来表示各种进制二进制 2八进制 8十进制 10十六进制 16NumValue是给定的数值字符串包括 0 - 9, A - ZBaseFrom是给定的数值的进制可以是2与36间的任何整数BaseTo是希望转换成的进制可以是2与36间的任何整数函数返回希望得到的进制数是一个String类型Dim i As IntegerDim PlaceValue As IntegerDim CurrentCharacter As StringDim CharacterValue As IntegerDim RunningTotal As DoubleDim Remainder As DoubleDim BaseOutDouble As DoubleDim NumInCaps As String确认NumValue有效If NumValue Or BaseFrom 2 Or BaseFrom 36 _Or BaseTo 1 Or BaseTo 36 ThenConvertBase ErrorExit FunctionEnd If使字母为大写NumInCaps UCase(NumValue)先将给定的数转换为十进制PlaceValue Len(NumInCaps)For i 1 To Len(NumInCaps)PlaceValue PlaceValue - 1CurrentCharacter Mid(NumInCaps, i, 1)CharacterValue 0If Asc(CurrentCharacter) 64 And _Asc(CurrentCharacter) 91 ThenCharacterValue Asc(CurrentCharacter) - 55End IfIf CharacterValue 0 ThenIf Asc(CurrentCharacter) 48 Or _Asc(CurrentCharacter) 57 ThenConvertBase ErrorExit FunctionElseCharacterValue Val(CurrentCharacter)End IfEnd IfIf CharacterValue 0 Or CharacterValue BaseFrom - 1 ThenConvertBase ErrorExit FunctionEnd IfRunningTotal RunningTotal CharacterValue * (BaseFrom ^ PlaceValue)Next i将得到的十进制数转换为目标进制DoBaseOutDouble CDbl(BaseTo)Remainder ModDouble(RunningTotal, BaseOutDouble)RunningTotal (RunningTotal - Remainder) / BaseToIf Remainder 10 ThenCurrentCharacter Chr(Remainder 55)ElseCurrentCharacter Right(Str(Remainder), _Len(Str(Remainder)) - 1)End IfConvertBase CurrentCharacter ConvertBaseLoop While RunningTotal 0End FunctionFunction ModDouble(NumValue As Double, DivNum As Double) As Double返回一个由小数点分开的数用语Double数据类型ModDouble NumValue - (Int(NumValue / DivNum) * DivNum)End Function这里的自定义函数能很好的完成转换的任务尤其是可以转换Double数据类型这点在使用Windows注册表编程时很有用转换DWords。代码很复杂需要脑子不停的转动请您仔细理解。其实这只是一个通用的函数您可以提取思路用于自己的特定功能。调用方法Dim theValue As String十进制 - 十六进制theValue ConvertBase(100, 10, 16)二进制 - 八进制theValue ConvertBase(100, 2, 8)十进制 - 三进制theValue ConvertBase(100, 10, 3) 【 在 suliangfeng (疯子) 的大作中提到: 】: 我需要把一10进制的数转为2进制然后提取低7位请问如何实现谢谢