C#从负Int32恢复Int64

本文关键字:Int64 恢复 Int32 从负 | 更新日期: 2023-09-27 18:26:24

我想恢复这个long值,它被错误地转换为int

long longValue = 11816271602;
int intValue = (int)longValue; // gives -1068630286
long ActualLong = ?

intValue >> 32)的32位的右移给出不正确的结果。

C#从负Int32恢复Int64

好吧,初始值

long longValue = 11816271602L; // 0x02C04DFEF2 

五个字节长。当您将值强制转换为Int32时,它是四个字节长的

int intValue = (int)longValue; // 0xC04DFEF2 (note 1st byte 02 absence)

您不可避免地丢失第一个字节,而无法将其还原回来。

不幸的是,这是不可能的。如果你看一下二进制表示,你可以看到原因:

10 1100 0000 0100 1101 1111 1110 1111 0010

正如您所看到的,这个数字有34位,而不仅仅是32位。