0

我有一个 VB.Net 应用程序,它通过一系列过程来解码字符串,其中一个问题是我找到了一个可以将任何数字从二进制转换为十进制的函数,但是我找不到一个可以将提供的数字(以字符串格式)转换为二进制字符串。作为参考,二进制到十进制的转换函数如下:

Public Function baseconv(d As String)
    Dim N As Long
    Dim Res As Long
    For N = Len(d) To 1 Step -1
        Res = Res + ((2 ^ (Len(d) - N)) * CLng(Mid(d, N, 1)))
    Next N
    Return Str(Res)
End Function
4

4 回答 4

1

那这个呢?

Module Module1

Sub Main()
    Console.WriteLine(Convert.ToString(2253483438943167 * 5, 2))
    Console.ReadKey()
End Sub

End Module
于 2013-11-08T00:29:23.663 回答
1

怎么样

    Dim foo As BigInteger = Long.MaxValue
    foo += Long.MaxValue
    foo += 2
    Dim s As New System.Text.StringBuilder
    For Each b As Byte In foo.ToByteArray.Reverse
        s.Append(Convert.ToString(b, 2).PadLeft(8, "0"c))
    Next
    Debug.WriteLine(s.ToString.TrimStart("0"c))
    '10000000000000000000000000000000000000000000000000000000000000000
于 2013-11-08T01:56:51.890 回答
1

尝试使用这样的System.Numerics.BigInteger类:

Dim d As String
d = "2253483438943167"

Dim bi As BigInteger
bi = BigInteger.Parse(d)

Dim ba() As Byte
ba = bi.ToByteArray()

Dim s As String
Dim N As Long

Dim pad as Char
pad = "0"c

For N = Len(ba) To 1 Step -1
    s = s + Convert.ToString(ba(N)).PadLeft(8, pad)  
Next N
于 2013-11-08T01:29:16.790 回答
1

如果数字小于 16*1e18 <-> 可以保存在 Uint64 中,我会怎么做:
1)将数字存储在无符号 64 位整数中:num。
2)然后只需循环每个位来测试它:

 mask = 1<<63
 do
     if ( num AND mask ) then ->> push("1")
     else ->> push("0")
     mask = mask >> 1
 until mask = 0

(其中 push 使用字符串连接构建输出,或者,如果性能很重要,则使用 StringBuilder,或者它可以是流,...)

于 2013-11-08T01:24:55.713 回答