将C#代码转换为VB.NET
我尝试从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))
我得到这个错误
运算符'<<'未定义类型'Char'和'Integer'。
任何人都可以帮我纠正
编辑
uint a,b;
a = b = 0x9E3779B9;
url = string
你的主要问题似乎是C#允许在char上进行位移,而VB则不允许。
所以你需要像(未经测试的)
CUInt( ... + (CUint( url(k + 1) ) << 8) + ... )
但它确实看起来像一个相当弱的HashCode。
我不知道VB,但我怀疑你可以先将每个url(k + n)转换成ie
(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...
他们可以通过调试器,检查类型等进行操作,并充分了解正在发生的事情,然后您可以重构您喜欢的任何可读性。