之前的问题是将两个Int32
编码为一个Int64
[C# - Making one Int64 from two Int32s
问题:如何将一个Int64
解码为两个Int32
?
答案 0 :(得分:8)
这样的事情:
long x = ...;
int a = (int) (x & 0xffffffffL);
int b = (int) (x >> 32);
第一种形式的掩蔽是不可能的......我永远不会记得缩小转换和签名值的细节,这就是为什么我把它包括在内:)
答案 1 :(得分:3)
这是一个(便宜)解决方案,适用于两种转换。
[StructLayout(LayoutKind.Explicit)]
public struct UnionInt64Int32 {
public UnionInt64Int32(Int64 value) {
Value32H = 0; Value32L = 0;
Value64 = value;
}
public UnionInt64Int32(Int32 value1, Int32 value2) {
Value64 = 0;
Value32H = value1; Value32L = value2;
}
[FieldOffset(0)] public Int64 Value64;
[FieldOffset(0)] public Int32 Value32H;
[FieldOffset(4)] public Int32 Value32L;
}
虽然这是一个明显的缺点,但它是不可移植的。 Value32H和value32L将在不同的端平台上反转。