当前位置:编程学习 > VB >>

vb 怎么把36进制转换成 10 进制


vb 怎么把36进制转换成 10 进制 --------------------编程问答-------------------- 使用Select来实现 --------------------编程问答-------------------- 跟十六进制的方式差不多吧,根据进制的权值和位数进行转换
100进制转10进进制也是类似的方法 --------------------编程问答--------------------
Dim basestr As String
Dim n36 As String
Dim n As Long
Dim L As Long
Dim i As Long
basestr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
n36 = "Z7"
n = 0
For i = 1 To Len(n36)
    n = n * 36 + (InStr(basestr, Mid(n36, i, 1)) - 1)
Next
Debug.Print n '1267

--------------------编程问答-------------------- 貌似C有个函数可以直接转换 --------------------编程问答--------------------
引用 1 楼  的回复:
使用Select来实现

Select很烦琐,效率也低吧? --------------------编程问答--------------------
引用 2 楼  的回复:
跟十六进制的方式差不多吧,根据进制的权值和位数进行转换
100进制转10进进制也是类似的方法


哪里?100 进制转 10 进制可以有更便捷的算法。就像十六进制转二进制不需要传统算法一个道理。
--------------------编程问答-------------------- http://topic.csdn.net/u/20120601/13/f3f69e62-0928-43e5-aa7a-2ba93d9ce0ec.html
不会是同一个老师的作业吧。
改一下字符串常量和进制常数40就变成不同的进制转换了。
--------------------编程问答--------------------

cout<<strtol("z",NULL,36)<<endl;

输出35 --------------------编程问答--------------------
转换是有通用的基本算法,但要根据数据的大小和类型选择不同的具体实现。

如果数字大小不超过 Long,就较为简单,否则可能涉及到超长数字的处理。
--------------------编程问答--------------------

Option Explicit

Private Sub main()
    Dim s As String
    s = "g9z3"
    Debug.Print strtodec(s)
End Sub

Function strtodec(s As String) As Long
    Dim i As Integer, st As String, slen As Integer
    s = LCase(s)
    slen = Len(s)
    For i = slen To 1 Step -1
        st = Mid(s, i, 1)
        strtodec = strtodec + IIf(IsNumeric(st), st, Asc(st) - 87) * 36 ^ (slen - i)
    Next
End Function


看看这个方法如何,不过要注意溢出,自己写的函数。 --------------------编程问答-------------------- 怎么再从十进制转换36   --------------------编程问答-------------------- 10->36
依次整除36,将余数排列起来就可以了。
36->10
每一位乘以36^n(n是位数),再相加。

这么简单的问题,教科书上就有。上过学的都会。 --------------------编程问答-------------------- 举两个例子,看明白了自己思考把程序写出来。
(1)(12)(34)转换成10进制:
1 x 36^2 + 12 x 36^1 + 34 x 36^0 = 1 x 1296 + 12 x 36 + 34 x 1 = 1296 + 432 + 34 = 1762

将1762转换为36进制:
1762 / 36 = 48 ... 34
48 / 36 = 1 ... 12
1 / 36 = 0 ... 1
0 / 36 = 0 ... 0
所以1762就是(0)(1)(12)(34)也就是(1)(12)(34)。
补充:VB ,  COM/DCOM/COM+
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,