[英]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.