这是段把十进制数转换为二进制反码的VB6代码,这段代码需要转换为原码函数(BinaryConvertA)的支持,开始的时候,我把它写成一个了独立的函数,但最后还是改到了现在这个样子,感觉如果转换原码代码部分有错误,可以把错误的代码改了就可以了,这样的代码逻辑性更好,也容易维护,出现代码不同步的可能性低,降低了代码的调试难度。同时,发现了在原码转换中的一个BUG,就是当十进制数为0的时候,我已经对前一篇文章进行了修改,但关于+0和-0的问题,还是没有处理好。我是写了一个都处理的版本,但因为传递的是数字,所以VB是不传符号的,所以-0传过去也会被当成+0处理。所以如果要在函数内完成,就必须传字符串,但函数内有数的比较运算,如果传字符串,就必须在函数中将字符串转成integer,比较麻烦(也增加了些不必要的运算,因为很多时候并不是-0,但却必须要进行cint(inum)运算),所以,我想把判断放在调用函数前会比较好!下面就是十进制转换到二进制反码的代码:
Public Function BinaryConvertB(ByVal iNum As Integer, Optional ByVal iLength As Integer = 8) As String
'//*************************************** Design By 0412Rainbow **********************************************//
'功能:用于将一个十进制数转换为二进制反码,iNum为所要转换的十进制数,iLength为机器字长(即二进制数的位数),可选,默认传递
' 值为8,iNum的转换范围-2^(n-1) 到 +2^(n-1),返回值为二进制的字符串形式.
'说明:反码简介(引自程序员教程):设机器字长为n,则最高位是符号位,0表示正号,1表示负号;正数的反码与原码相同,负数的反码
' 则是其绝对值按位取反。
'函数调用 二进制反码 = BinaryConvertB(十进制数,二进制字长)
'//**************************************************************************************************************//
ReDim S(iLength) As String * 1
Dim sResult As String, tempResult As String, j As Integer
tempResult = BinaryConvertA(iNum, iLength)
For j = 1 To iLength
S(j) = Mid(tempResult, iLength - j + 1, 1)
Next
If Abs(iNum) <> iNum Then
For j = 1 To iLength - 1
If S(j) = 0 Then
S(j) = 1
Else
S(j) = 0
End If
Next
End If
For i = iLength To 1 Step -1
sResult = sResult & S(i)
'Debug.Print sResult
Next
BinaryConvertB = sResult
End Function
函数调用举例只要参见转换原码的示例就好了.