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
位的右移给出不正确的结果。
好吧,初始值
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位。