Da C# devo convertirlo in VB.NET:

I valori dati sono u, sgh (costanti) e k (variabile)
u e sgh sono stringhe
k è un intero

codice:
k = (uint)k ^ (uint)(sgh[i%sgh.Length])^(uint)(u[i]);
k = k>>23|k<<9;
Ho provato con:

codice:
k = k Xor Asc(Mid(sgh, i Mod sgh.Length)) Xor Asc(Mid(u, i))
k = k >> 23 Or k << 9
ma i risultati non corrispondono.

Cosa ho sbagliato?