我需要将以下结构放入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? 所有项目都是数字的,具有指定的位大小
答案 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#中你必须像在其他答案中一样自行移位。