所以我有一个生成器,它创建一个26十六进制字符串,转换为二进制时具有1和0的平衡。实际上是26.5。第27个字符二进制值的前半部分存储在buf中。而后半部分用于使前106位变得漂亮和均匀。或至少应该。我如何使用buf中的二进制残余生成第27个字符,并将最后22位变为第一个106的哈希/校验和?下面是我的发电机。
Dim rnd As New Random()
Dim bin As New StringBuilder()
Dim buf As Integer = 0, bufLen As Integer = 0, left As Integer = 53
For i As Integer = 106 To 0 Step -1
buf <<= 1
If rnd.[Next](i) < left Then
buf += 1
left -= 1
End If
If System.Threading.Interlocked.Increment(bufLen) = 4 Then
bin.Append("0123456789abcdef"(buf))
bufLen = 0
buf = 0
End If
Next
Dim b As String = bin.ToString()
TextBox1.Text = (b)
我将如何完成此过程?
答案 0 :(得分:0)
你有106到0步-1,这意味着107次迭代创建26个十六进制数字,其中 三 位于buf
中的其他位(虽然最后一个保证是0)...你也可以把它变成108并让它为bin
添加一个额外的十六进制数字 - 它并不重要也是0,那么你可以应用任何&gt; = 22位散列/校验和算法,你喜欢bin
中的数据并附加散列/校验和值 - 你显然知道如何切除左边最不重要的4位,生成十六进制数字,并旋转 - 最后一次你可以使用3和OR或XOR将值放在你生成的最后一个十六进制数字上 - 设置上面添加的两个尾随0。谷歌搜索&#34; VB校验和&#34;出现了很多示例代码。如果您遇到困难,请发布您的代码和具体问题。
另外,我不了解VB,所以可能有一些奇怪的原因,但我无法想象你为什么要使用看似局部变量的线程安全增量我在执行线程的堆栈中假设并且其他线程无法访问?