如何在int64中使用结构?

时间:2010-08-15 10:55:54

标签: c# c++ data-structures int64

我需要将以下结构放入int64。

day  9 bit (0 to 372)
year 8 bit (2266-2010 = 256 y)
seconds  17 bit (24*60*60=86400 s)
hostname 12 bit (2^12=4096)
random 18 bit (2^18=262144)

如何使这种结构适合int64? 所有项目都是数字的,具有指定的位大小

3 个答案:

答案 0 :(得分:7)

通常,您将声明一个带有一个int64字段的结构,以及多个只访问该字段相关位的属性。

所以喜欢:

struct MyStruct
{
    int64 _data

    public short Day
    {
        get { return (short)(_data >> 57); }
    }
}

答案 1 :(得分:7)

只是按位 - 或组件和适当的班次。

int64 combined = random | (hostname << 18) | (seconds << (18+12)) ... etc.

通过转移和解决问题来解决问题。

random = combined & 0x3FFFF
hostname = (combined >> 18) & 0xFFF;
etc.

答案 2 :(得分:4)

你标记了这个C ++和C#,两者的选择非常不同。

在C ++中,您可以使用bit-fields

// from MSDN
struct Date 
{
   unsigned nWeekDay  : 3;    // 0..7   (3 bits)
   unsigned nMonthDay : 6;    // 0..31  (6 bits)
   unsigned nMonth    : 5;    // 0..12  (5 bits)
   unsigned nYear     : 8;    // 0..100 (8 bits)
};

在C#中你必须像在其他答案中一样自行移位。