永发信息网

vb中如何将二进制数转换为十进制数考虑小数和负号

答案:2  悬赏:0  手机版
解决时间 2021-04-07 11:59
vb中如何将二进制数转换为十进制数考虑小数和负号
最佳答案
搞清楚二进制和十进制关系就可以了,二进制逢二进一,只有0和1。
K为二进制数里某N位数字,则转成十进位则是K乘以2的N次方,小数则为K乘以2的-N次方。
全部回答

弄的很复杂,不知道哪位有简单的方法?
二进制转换为小数值没法直接处理,土办法有一个,通过二进制文件来转换,如把Double数值写到二进制文件,再用8个字节的数组读取出来。
试试下面两函数
DecToBits 把小数值转换为一二进制字符串
BitsToDec 再把二进制串转换为小数,能还愿,将就用吧。
'数值转换为二进制字符串
Public Function DecToBits(ByVal d As Double) As String
    Dim id As Integer
    id = FreeFile
    Open GetTempfile For Binary As #id
    Put #id, 1, d
    Dim bt() As Byte
    ReDim bt(1 To Len(d))
    Get #id, 1, bt
    Close #id
    Dim i   As Integer
    Dim b   As Byte
    Dim btL As Integer
    btL = UBound(bt)
    For i = 1 To btL  2 '数字高字节在右边,把它倒过来
        b = bt(i)
        bt(i) = bt(btL - i + 1)
        bt(btL - i + 1) = b
    Next
    DecToBits = BytesToBits(bt)
End Function
'二进制字符串转换为数值
Public Function BitsToDec(ByVal bitString As String) As Double
    If bitString Like "*[!01]*" Then
        Err.Raise 5
    Else
        Dim id As Integer
        id = FreeFile
        Open GetTempfile For Binary As #id
        Dim bt() As Byte
        bitString = Left(bitString, 1) & String(64 - Len(bitString), "0") & Mid(bitString, 2)
        bt = BitsToBytes(bitString)
        Dim btL As Integer
        btL = UBound(bt)
        Dim b As Byte
        Dim i As Integer
        For i = 1 To btL  2 '数字高字节在右边,把它倒过来
            b = bt(i)
            bt(i) = bt(btL - i + 1)
            bt(btL - i + 1) = b
        Next
        Put #id, 1, bt
        Dim d As Double
        Get #id, 1, d
        Close #id
        BitsToDec = d
    End If
End Function
'-------------------------------------------------------------------------
'-------------------------------------------------------------------------
'字节数组转换为二进制字符串
Public Function BytesToBits(bts() As Byte) As String
    Dim i         As Integer
    Dim bitString As String
    For i = LBound(bts) To UBound(bts)
        bitString = bitString & ByteToBits(bts(i))
    Next
    BytesToBits = bitString
End Function
'单个字节转换为二进制字符串
Public Function ByteToBits(ByVal bt As Byte) As String
    Dim i   As Integer
    Dim pt As Byte
    Dim s   As String
    s = String(8, "0")
    For i = 0 To 7
        pt = 2 ^ i
        If bt And pt Then
            Mid(s, 8 - i, 1) = "1"
        End If
    Next
    ByteToBits = s
End Function
'-------------------------------------------------
'二进制字符串转换为字节数组
Public Function BitsToBytes(ByVal bitString As String) As Byte()
    If bitString Like "*[!01]*" Then
        Err.Raise 5
    Else
        Dim strM As Integer
        strM = Len(bitString) Mod 8
        If strM > 0 Then
            bitString = Left(bitString, 1) & String(8 - strM, "0") & Mid(bitString, 2)
        End If
        'bitString = StrReverse(bitString)
        Dim bt() As Byte
        ReDim bt(1 To Len(bitString)  8)
        Dim i As Integer
        For i = 1 To UBound(bt)
            bt(i) = BitsToByte(Mid(bitString, i * 8 - 7, 8))
        Next
        BitsToBytes = bt
    End If
End Function
'8位二进制字符串转换为Byte类型
Public Function BitsToByte(ByVal bits As String) As Byte
    If Not bits Like "*[!01]*" And Len(bits) <= 8 Then
        Dim i  As Integer
        Dim bt As Byte
        Dim bL As Integer
        bL = Len(bits)
        For i = 1 To bL
            If Mid(bits, i, 1) = "1" Then
                bt = bt + 2 ^ (bL - i)
            End If
        Next
        BitsToByte = bt
    Else
        Err.Raise 5
    End If
End Function
'----------------------------------------------------------------
'临时文件名
Public Function GetTempfile() As String
    Static TempFile As String
    If TempFile = Empty Then
        Dim fso As Object
        Set fso = CreateObject("Scripting.Filesystemobject")
        TempFile = fso.GetSpecialFolder(2) & "" & fso.GetTempName
    End If
    GetTempfile = TempFile
End Function
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
韩剧家门的荣光中饰演南教授的演员有没有演过
去新加坡有直飞的吗? 价格是多少
宏源光电科技公司我想知道这个在什么地方
普莱晶科技高效液相色谱仪怎么样?
如果一个男人占有欲强没上进心。还能跟他在一
64乘以65分之八有简便方法怎么算
人民币第3.4.5套同号合集现在值多少钱?
名不虚传是什么意思?
单色凌首专小岁月太着急里面有首中国风歌曲叫
请问中铁八局去非洲刚果金当法语翻译
帝国时代2场景模式城堡;;为什么别人有些兵血
必胜堡炸鸡汉堡(师范店)我想知道这个在什么地
冯这个姓用韩文怎么表示
魔尊火线1.1中文补丁
单选题19世纪末日本成为亚洲资本主义经济最发
推荐资讯
在等差数列中a1>0,3a4=7a7求sn取得最大值时n
板栗成熟时开裂是为什么
怎么卸载tcl平版电视上面的腾讯视频
飞利浦222el1sb 亮度不能保存
电视主板上的光耦ic和电磁炉上的是否一致
一就怎么造句
海贼王 火影 死神 妖精的尾巴等禁图或漫画
有哪些大学文理科可以在一起
观古今于须臾 抚四海于一瞬的下一句
拳皇DIY2007可选200人怎样选暴态八神
怎么装厨房才能又好看又实用
灌云是哪个地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?