我尝试从c#转换此代码
a += (uint)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));
到vb,net我得到这个
a += CUInt(url(k + 0) + (url(k + 1) << 8) + (url(k + 2) << 16) + (url(k + 3) << 24))
我得到这个错误
运营商'&lt;&lt;'没有为类型'Char'和'Integer'定义。
任何人都可以帮我纠正
修改
uint a,b;
a = b = 0x9E3779B9;
url = string
答案 0 :(得分:3)
你的主要问题似乎是C#允许在char上进行位移,而VB则不允许。
所以你需要像(未经测试的)
这样的东西 CUInt( ... + (CUint( url(k + 1) ) << 8) + ... )
但它确实看起来像一个相当弱的HashCode。
答案 1 :(得分:1)
我不知道VB,但我怀疑你可以先把每个网址(k + n)投出来,即
(CUint(url(k+2))<< 8)
我还假设CUint是32位 假设你试图在4个字符中创建一个32位的int,你可以做更多的检查,但至少我会把它变成两个方法ConvertCharArrayToUint()和另一个每个移位ShiftCharLeft(char,numBits)和在那里隐藏所有的铸造丑陋。我对C#感到惊讶,你可以转移这样的字符。
编辑:尝试在单独的行中进行此操作
int part_0 = Val(url(k));
int part_1 = Val(url(k+1));
int part_2 = Val(url(k+2));
...
int shifted_1 = part_1 << 8;
...
int result = part_0 + shifted_1...
他们可以使用调试器,检查类型等,并充分了解正在发生的事情,然后您可以重构您喜欢的任何可读性。
答案 2 :(得分:0)