所以我有一个生成器,它创建了一个26十六进制字符串,在转换为二进制时具有1和0的平衡。实际上26.5。第27个字符二进制值的前半部分存储在一个buf中。后半部分用于使前106位均匀。或者至少应该这样。我如何使用二进制残余物来生成第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)
我该如何完成这个过程?
你有106到0步-1,这意味着107次迭代创建26十六进制数字与三个 buf
进一步的位(虽然最后一个保证为0)…你不妨让它108年和它添加一个额外的十六进制数字bin
——没关系,这也是0,那么你可以用任何你喜欢的> = 22位散列/校验和算法bin
中的数据和附加的散列/校验和值,你显然知道如何片最重要的4位离开,生成十六进制数字,和旋转,你最后一次可以用3或或XOR和价值生成最终的十六进制数字你——设置两个落后0补充道。在谷歌上搜索"VB校验和"会出现大量示例代码。如果你卡住了,把你的代码和具体的问题贴出来。
单独,我不知道VB所以可能有一些奇怪的原因,但我无法想象为什么你使用什么似乎是一个线程安全增量的局部变量,我假设在执行线程的堆栈和不可访问的其他线程?