如何将一个Int64解码回两个Int32?

时间:2010-09-01 08:54:46

标签: c#

之前的问题是将两个Int32编码为一个Int64 [C# - Making one Int64 from two Int32s

问题:如何将一个Int64解码为两个Int32

2 个答案:

答案 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将在不同的端平台上反转。