如何将结构装入 int64 中?

发布于 2024-09-14 21:17:38 字数 242 浏览 8 评论 0原文

我需要将以下结构放入 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? 所有项目都是数字,并且具有指定的位大小

I need to fit the following structure into 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)

How do I make such a structure fit in an int64?
All items are numberic, and of the specified bit size

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

青春如此纠结 2024-09-21 21:17:38

只需按位或将组件加上适当的移位即可。

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

通过移动和组合来取出东西。

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

Just bitwise-or the components together with appropriate shifts.

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

Get things out by shifting and and-ing them.

random = combined & 0x3FFFF
hostname = (combined >> 18) & 0xFFF;
etc.
影子是时光的心 2024-09-21 21:17:38

通常,您会声明一个包含一个 int64 字段和多个仅访问该字段的相关位的属性的结构。

所以就像:

struct MyStruct
{
    int64 _data

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

Typically you'd declare a structure with one int64 field, and multiple properties which access just the relevant bits of that field.

So like:

struct MyStruct
{
    int64 _data

    public short Day
    {
        get { return (short)(_data >> 57); }
    }
}
写给空气的情书 2024-09-21 21:17:38

您标记了 C++ 和 C#,这两个选项非常不同。

在 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# 中,您必须自己进行位移,就像其他答案一样。

You tagged this C++ and C#, very different options for those two.

In C++ you can use 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)
};

In C# you will have to bit-shift yourself, as in the other answers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文