Как мне конвертировать ulong в long с тем же результатом, что и в c ++.
C ++
unsigned long ul = 3633091313;
long l = (long)ul;
l is -661875983
C #
ulong ul = 3633091313;
long l = (long)ul;
l is 3633091313
C ++ ‘s long
часто это 32-битный тип данных. Похоже, в вашей системе не хватает бит для представления 3633091313
так что результат отрицательный. Это поведение не определено в C ++ (соответствующий Q&).
В C # это соответствует преобразованию в int
:
UInt64 ul = 3633091313UL;
Int32 l = (int)ul;
Console.WriteLine(l); // prints -661875983
Других решений пока нет …