回 帖 发 新 帖 刷新版面

主题:[原创]二进制转十进制


函数原形如下;
'参数;value  是一组二进制值.
'功能;二进制转换为十进制
Public Function Ex2转10(ByVal value As String) As Integer
Dim eulaV As String '存储返转后值.
Dim forValue As Integer '存储循环中取出的单个值.
Dim NextValue As Integer '存储循环完成后的总值
Dim i As Integer '用于循环

    eulaV = StrReverse(value) 'StrReverse':反转字符串
    MsgBox "返转前为;" & value & "    返转后为:" & eulaV
    For i = 1 To Len(value)
       forValue = val(Mid(eulaV, i + 1, 1))
'      MsgBox forValue & "乘" & 2 & "的" & i & "次方=" & forValue * 2 ^ i
       NextValue = NextValue + forValue * 2 ^ i
    Next
'    MsgBox NextValue
    
    Ex2转10 = NextValue

End Function

结果错误为;当我输入
     十进制 = 二进制 = 十进制
       1    =  1     =  0
       13   =  1101  =  12
       15   =  1111  =  14
       17   =  10001 =  16
       19   =  10011 =  18
      1235  =  10011010011 = 1234

请问这是为何呀!各位大虾指教

回复列表 (共2个回复)

沙发

引用fieldmax的一个观点:用mid函数注定的低效,如果串一长,速度很慢,mid就是罪魁祸首。

另:为什么要每次都计算一次2 ^ i,这不很浪费时间吗?

板凳


代码修改如下;可以解决我前面所提到的问题.
Dim i As Long
    For i = 1 To Len(Bin)
        BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Bin, i, 1))
    Next i

第二问题
怎样才能把这个二进制值写入注册表中呢?

十进制:60= 二进制:111100 如何把:111100 这个值写入注册表

虽然下面这个代码可能写入注册表但是不对呀.它是这样的
'写注册表
 For i = 0 To 3
     nBytes(i) = i  
RegSetValueEx HKEY_CURRENT_USER, "RegValue" & i, 0, REG_BINARY, nBytes(i), 4
 Next
注册表中写入的值.

"wukanglin0"=hex:00,00,00,00
"wukanglin1"=hex:01,00,00,c8
"wukanglin2"=hex:02,00,c8,05
"wukanglin3"=hex:03,c8,05,1d



我来回复

您尚未登录,请登录后再回复。点此登录或注册