【问题标题】:C# Recover Int64 from negative Int32C# 从负 Int32 恢复 Int64
【发布时间】:2016-03-15 19:24:43
【问题描述】:
我想恢复这个long 值,它被错误地转换为int
long longValue = 11816271602;
int intValue = (int)longValue; // gives -1068630286
long ActualLong = ?
右移 (intValue >> 32) 的 32 位会得到不正确的结果。
【问题讨论】:
标签:
c#
parsing
integer
recover
【解决方案1】:
嗯,初始值
long longValue = 11816271602L; // 0x02C04DFEF2
是 5 个字节长。当您将值转换为 4 个字节长的 Int32 时
int intValue = (int)longValue; // 0xC04DFEF2 (note 1st byte 02 absence)
你不可避免地丢失第一个字节并且不能恢复它。
【解决方案2】:
很遗憾,这是不可能的。如果你看一下二进制表示,你可以看到原因:
10 1100 0000 0100 1101 1111 1110 1111 0010
如您所见,这个数字有 34 位,而不仅仅是 32 位。