簡體   English   中英

C#如何用XOR(^)表示(unsigned long)(unsigned int)(ulong)(uint)

[英]C# How to represent (unsigned long)(unsigned int) (ulong)(uint) with XOR (^)

我正在將C ++代碼轉換為C#

說我在C ++中得到了這個

int v5;
v5 = (*(_DWORD *)(v4 + 68) ^ (unsigned __int64)(unsigned int)(*(_DWORD *)(v4 + 56) ^ *(_DWORD *)(v4 + 20))) % 9;

在C#中會像..

   int v5;
   v5 = (int)((BitConverter.ToInt32(v4, 68) ^ (ulong)(uint)(BitConverter.ToInt32(v4, 56) ^ BitConverter.ToInt32(v4, 20))) % 9);

但是我得到了錯誤.. (ulong)(uint)

運算符'^'不能應用於'int'和'ulong'類型的操作數

我應該做

(int)(ulong)(uint)(...)

要不然是啥?

使用BitConvert.ToUInt32 (對應於Win32 C ++編程中的DWORD類型),而不要使用ToInt32 (通常是int ),這應該可以幫助您減少某些轉換並解決某些類型問題。

忠實的轉換應該類似於以下內容,盡管我認為沒有必要對ulong進行中間轉換(因為無論如何在進行mod 9時都會忽略32個最重要的位,我認為它們總會結束為0):

(int)((BitConvert.ToUInt32(v4, 68) ^ (ulong)BitConvert.ToUInt32(v4, 56) ^ BitConvert.ToUInt32(v4, 20)) % 9);

暫無
暫無

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

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