是否有比 Convert.ToString(byte,2) 更快的 base-2 转换?

Is there faster base-2 conversion than Convert.ToString(byte,2)?

有没有比 Convert.ToString(byte,2)

更快的 base-2 转换方法

我会运行这个循环:

Function varintbinaryToint(b() As Byte) As Integer
    Const b127 As Byte = 127
    Dim sb = New Text.StringBuilder

    For i = b.Length - 1 To 0 Step -1
        sb.AppendFormat(Convert.ToString(b(i) And b127, 2).PadLeft(7, "0"c))
    Next

    Return Convert.ToInt32(sb.ToString, 2)

    --to binary      1100 0100  ‬ ‭0001 0110‬
    --remove msb     ‭ 100 0100  ‬ ‭ 001 0110‬
    --reverse         001 0110‬    100 0100
    --join           10110‬1000100
    --bin 2 int      2884
End Function

通过将代码移出循环以创建可以比 运行 每次通过代码更快索引的数组,您可以在每次函数调用期间节省时间。 (显然,这不是更快的 base-2 转换,因为它使用相同的代码进行转换。)

Private Shared SevenBitZeroPaddedBinary = Enumerable.Range(0,128) _
    .Select(Function(i) Convert.ToString(i,2).PadLeft(7,"0"c)) _
    .ToArray() 

Function varintbinaryToint(b() As Byte) As Integer
    Const b127 As Byte = 127
    Dim sb = New Text.StringBuilder

    For i = b.Length - 1 To 0 Step -1
        sb.Append(SevenBitZeroPaddedBinary(b(i) And b127))
    Next

    Return Convert.ToInt32(sb.ToString, 2)

    '--to binary      1100 0100  ‬ ‭0001 0110‬
    '--remove msb     ‭ 100 0100  ‬ ‭ 001 0110‬
    '--reverse         001 0110‬    100 0100
    '--join           10110‬1000100
    '--bin 2 int      2884
End Function

我查看了 Convert.ToString(byte,int)

的源代码

它调用了 Native 实现,所以我想它已经是我们所能拥有的最快速度了:

ParseNumbers.IntToString((int)value, toBase, -1, ' ', ParseNumbers.PrintAsI1)

源代码在这里:http://referencesource.microsoft.com/#mscorlib/system/parsenumbers.cs,9d6624da44b02e1f

状态:

** Class: ParseNumbers

** Purpose: Methods for Parsing numbers and Strings.

** All methods are implemented in native.