簡體   English   中英

將C#代碼轉換為VB.NET

[英]Converting C# code to VB.NET

我嘗試從C#轉換此代碼

a += (uint)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24));

到VB,凈我得到這個

a += CUInt(url(k + 0) + (url(k + 1) << 8) + (url(k + 2) << 16) + (url(k + 3) << 24))

我得到這個錯誤

沒有為類型“ Char”和“ Integer”定義運算符“ <<”。

誰能幫我糾正

編輯

a,b;

a = b = 0x9E3779B9;

url =字符串

您的主要問題似乎是C#允許對char進行位移位,而VB不允許。

因此,您將需要類似(未經測試)的內容

 CUInt( ... + (CUint( url(k + 1) ) << 8) + ... )

但是它看起來確實像一個相當弱的HashCode。

我不知道VB,但我懷疑您可以先轉換每個網址(k + n),即

(CUint(url(k+2))<< 8)

我還假設CUint為32位假設您嘗試從4個字符中創建一個32位int,則可能需要進行更多檢查,但至少我會將其轉換為兩個方法ConvertCharArrayToUint()和另一個每個移位ShiftCharLeft(char,numBits)並在那里隱藏所有強制轉換丑陋。 我對C#感到驚訝,因為您可以像這樣移動char。

編輯:在弄清楚時,嘗試在單獨的行上執行此操作

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

您可以通過調試器逐步檢查它們,檢查類型等並全面了解正在發生的事情,然后可以根據自己的喜好來重構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM