C++ 在字节的一部分中存储int的最快方法?

C++ 在字节的一部分中存储int的最快方法?,c++,C++,首先,这不是家庭作业。在一个压缩算法中,我试图使我需要以这种方式存储内容: 我想存储一个从0到2^10-1的数字 通常情况下,用户将通过消耗16位来存储该数字。我不要这个。另一个理智的人会说:好吧,用前10位。我不要这个 我想这样存储数字:使用5位,3位为空,使用5位,3位为空 如何快速做到这一点而不产生令人讨厌的bug风险?我认为尝试其他方法没有多大意义,除了显而易见的方法: static inline void store10(uint8_t *out, unsigned short val

首先,这不是家庭作业。在一个压缩算法中,我试图使我需要以这种方式存储内容:

我想存储一个从0到2^10-1的数字

通常情况下,用户将通过消耗16位来存储该数字。我不要这个。另一个理智的人会说:好吧,用前10位。我不要这个

我想这样存储数字:使用5位,3位为空,使用5位,3位为空


如何快速做到这一点而不产生令人讨厌的bug风险?

我认为尝试其他方法没有多大意义,除了显而易见的方法:

static inline void store10(uint8_t *out, unsigned short value)
{
  out[0] &= 0xe0;
  out[0] |= (value & 0x1f0) >> 5; // mask not needed if value is in-range.
  out[1] &= 0xe0;
  out[1] |= value & 0x1f;
}

我认为,除了显而易见的方式之外,尝试其他方式没有多大意义:

static inline void store10(uint8_t *out, unsigned short value)
{
  out[0] &= 0xe0;
  out[0] |= (value & 0x1f0) >> 5; // mask not needed if value is in-range.
  out[1] &= 0xe0;
  out[1] |= value & 0x1f;
}

我认为,除了显而易见的方式之外,尝试其他方式没有多大意义:

static inline void store10(uint8_t *out, unsigned short value)
{
  out[0] &= 0xe0;
  out[0] |= (value & 0x1f0) >> 5; // mask not needed if value is in-range.
  out[1] &= 0xe0;
  out[1] |= value & 0x1f;
}

我认为,除了显而易见的方式之外,尝试其他方式没有多大意义:

static inline void store10(uint8_t *out, unsigned short value)
{
  out[0] &= 0xe0;
  out[0] |= (value & 0x1f0) >> 5; // mask not needed if value is in-range.
  out[1] &= 0xe0;
  out[1] |= value & 0x1f;
}
unsigned short pack10(unsigned short n)
{
返回((n&0x3e0)
unsigned short pack10(unsigned short n)
{
返回((n&0x3e0)
unsigned short pack10(unsigned short n)
{
返回((n&0x3e0)
unsigned short pack10(unsigned short n)
{


返回((n&0x3e0)你需要更清楚地了解你想要什么。我不明白你需要什么以及问题是什么。也许可以举个例子说明你想要做什么?我希望每个字节的最后3位为空,这样我可以在不影响number@C.B当前位置这就是我使用两个5位的原因我假设您有确定移位和掩蔽不合适使用位掩蔽运算符还不够吗?你需要更清楚地了解你想要什么。我无法理解你需要什么以及问题是什么。也许可以举个例子说明你想做什么?我想让每个字节的最后3位为空,这样我就可以在那里存储0或1不影响number@C.B:这就是我使用两个5位的原因。我假设您已经决定移位和掩蔽不合适。使用位掩蔽运算符不够吗?您需要更清楚地了解您想要什么。我无法理解您需要什么以及问题是什么。也许可以举一个您想要的示例我希望每个字节的最后3位都是空的,这样我就可以在那里存储0或1而不影响number@C.B:这就是我使用两个5位的原因。我假设您已经决定移位和掩蔽不合适。使用位掩蔽运算符不够吗?您需要更清楚地了解您想要什么。我不能了解您需要什么以及问题是什么。也许可以举一个示例说明您希望能够做什么?我希望每个字节的最后3位为空,这样我可以在不影响number@C.B:这就是我使用两个5位的原因。我假设您已经确定移位和掩蔽不合适。不可以使用位掩码运算符就足够了?当它说“x在范围内”时,您的注释是什么意思?我看不到变量
x
。当它说“x在范围内”时,您的注释是什么意思?当它说“x在范围内”时,您的注释是什么意思?我看不到变量
x
。当它说“x在范围内”时,您的注释是什么意思“x在范围内”?我看不到变量
x