次の構造を 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 に適合させるにはどうすればよいですか? すべてのアイテムは数値であり、指定されたビットサイズです
次の構造を 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 に適合させるにはどうすればよいですか? すべてのアイテムは数値であり、指定されたビットサイズです
通常、1 つの int64 フィールドと、そのフィールドの関連ビットのみにアクセスする複数のプロパティを含む構造体を宣言します。
以下のようなので:
struct MyStruct
{
int64 _data
public short Day
{
get { return (short)(_data >> 57); }
}
}
適切なシフトと一緒にビット単位またはコンポーネント。
int64 combined = random | (hostname << 18) | (seconds << (18+12)) ... etc.
それらをシフトしてand-ingすることにより、物事を取り出します。
random = combined & 0x3FFFF
hostname = (combined >> 18) & 0xFFF;
etc.
この C++ と C# にタグを付けましたが、これら 2 つのオプションは大きく異なります。
C++ では、ビットフィールドを使用できます。
// 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#では、他の回答と同様に、自分でビットシフトする必要があります。