是否有比使用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发布于 2015-11-25 08:31:01
我看过Convert.ToString的源代码(字节,int)
它调用了一个本机实现,所以我想它是我们所能拥有的最快的:
ParseNumbers.IntToString((int)value, toBase, -1, ' ', ParseNumbers.PrintAsI1)这里的源代码:http://referencesource.microsoft.com/#mscorlib/system/parsenumbers.cs,9d6624da44b02e1f
各国:
**类别: ParseNumbers **目的:分析数字和字符串的方法。 **所有方法都是用本机实现的。
发布于 2015-11-22 16:40:11
通过将代码从循环中移出以创建一个比每次传递运行代码更快的索引的数组,可以节省每次函数调用期间的时间。(显然,这不是一个更快的基-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 Functionhttps://stackoverflow.com/questions/33839472
复制相似问题