是否有比 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 101101000100
--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 101101000100
'--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.
有没有比 Convert.ToString(byte,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 101101000100
--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 101101000100
'--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.