如何在int64中使用结构?

Ste*_*ger 0 c# c++ int64 data-structures

我需要将以下结构放入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)
Run Code Online (Sandbox Code Playgroud)

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

Ano*_*on. 7

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

所以喜欢:

struct MyStruct
{
    int64 _data

    public short Day
    {
        get { return (short)(_data >> 57); }
    }
}
Run Code Online (Sandbox Code Playgroud)


dev*_*ity 7

只是按位 - 或组件与适当的班次一起.

int64 combined = random | (hostname << 18) | (seconds << (18+12)) ... etc.
Run Code Online (Sandbox Code Playgroud)

通过移动和分析来解决问题.

random = combined & 0x3FFFF
hostname = (combined >> 18) & 0xFFF;
etc.
Run Code Online (Sandbox Code Playgroud)