将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... 

他们可以通过调试器,检查类型等进行操作,并充分了解正在发生的事情,然后您可以重构您喜欢的任何可读性。