将C#代码转换为VB.NET

时间:2012-02-17 18:34:35

标签: 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))

我得到这个错误

  

运营商'&lt;&lt;'没有为类型'Char'和'Integer'定义。

任何人都可以帮我纠正

修改

uint a,b;

a = b = 0x9E3779B9;

url = string

3 个答案:

答案 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)