Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何在VBNET中实现hash3_Vb.net_Bytearray_Hash_Bit Manipulation_C# To Vb.net - Fatal编程技术网

Vb.net 如何在VBNET中实现hash3

Vb.net 如何在VBNET中实现hash3,vb.net,bytearray,hash,bit-manipulation,c#-to-vb.net,Vb.net,Bytearray,Hash,Bit Manipulation,C# To Vb.net,我试图在vb.net中实现Hash3,并试图从中转换 c中函数的第一部分# 专用共享函数rotl32(x作为UInt32,r作为字节)作为UInt32 返回(x>(32-r)) 端函数 k1*=c1 抛出错误算术运算导致溢出 有没有关于如何实施的建议?我不确定如何从输入中获取四个字节到UInt32部分,如果这是问题所在,或者它与其他内容有关,因为C#和VB之间的按位操作存在一些差异 作为参考,Java实现也存在 不幸的是,在VB.NET中是否可以执行与未检查{}等效的操作?如果溢出,您可以使

我试图在vb.net中实现Hash3,并试图从中转换

c中函数的第一部分#


专用共享函数rotl32(x作为UInt32,r作为字节)作为UInt32
返回(x>(32-r))
端函数
k1*=c1 抛出错误算术运算导致溢出

有没有关于如何实施的建议?我不确定如何从输入中获取四个字节到UInt32部分,如果这是问题所在,或者它与其他内容有关,因为C#和VB之间的按位操作存在一些差异

作为参考,Java实现也存在

不幸的是,在VB.NET中是否可以执行与未检查{}等效的操作?如果溢出,您可以使用try/catch阻塞并手动执行移位。请小心,在其中放入错误处理程序将减慢哈希计算。

我首先将32位
k1
转换为64位变量,例如:

k1_64 = CType(k1, UInt64)
对于模32位计算,请执行以下操作:

k1_64 = (k1_64 * c1) And &HFFFFFFFFUI
最后,重铸回32位

k1 = CType(k1_64 And $HFFFFFFFFUI, UInt32)
< >为了增加更多的性能,您可能需要考虑替换<代码> BitConverter。 编辑:这里有一个更简单的版本,没有附加变量(但有一个“helper常量”)

1L
强制在parens内执行尽可能长的计算(Int64)。
和LOW_32
将非零位的数量减少到32位,然后将整个结果自动转换为UInt32。类似的事情发生在
h1
行上


参考:(向下滚动到“常量和类型后缀的秘密”部分)

你为什么不在类库中使用C代码,从VB调用它?为什么要冒着移植错误的风险呢?项目+属性,编译选项卡,高级,勾选“删除整数溢出检查”选项。最好将此代码保存在单独的程序集中。当然也可能是C#1。
k1_64 = CType(k1, UInt64)
k1_64 = (k1_64 * c1) And &HFFFFFFFFUI
k1 = CType(k1_64 And $HFFFFFFFFUI, UInt32)
Const LOW_32 as UInt32 = &HFFFFFFFFUI
' ... intervening code ...
k1 = (1L * k1 * c1) And LOW_32
' ... later on ...
h1 = (h1 * 5L + &HE6546B64UL) And LOW_32