我想切换给定偏移量的位数。

我想在给定的 “偏移量 “上切换一个位,我试着用 typedef 创建一个新的类型 “BYTEBUF”,它的变量是位流……。

typedef struct{

    char *data;
    unsigned int nb_bytes;
    unsigned long bitlength;
}BYTEBUF;

这是我的类型定义

我想在给定的偏移量上切换位。

我试着用.NET技术,但很多人建议用 “offset8 “代替 “offset”。

bitstream->data[offset]^=1

但很多人建议用 “offset8 “代替 “offset”。

(这是我的第一个问题,所以请原谅任何错误)

解决方案:

你可以简单地使用 std::bitset 类,它为您提供了操作位的所有工具。在您的情况下,您可以这样使用它。

// A array of bits of size 16
std::bitset<16> bits;
// Flip the 6th bit
bits.flip(5);
// Set the 6th bit to one
bits.set(5, true);

如果你需要一个 struct 的可变大小(在你的例子中就是这样),那么你可以做这样的事情。

struct BYTES
{
  char* bytes;

  // Toggle the byte at position
  // Note that I'm not checking for any overflow
  // which you should definitely do
  void toggle(const size_t position)
  {
    bytes[position/8] ^= 1 << (position % 8);
  }
};

// I'm assuming everything has been allocated properly
BYTES b;
// Toggle the 14th bit
b.toggle(14);

The position/8 给出数组中的索引(因为它是一个char的数组),而 position%8 给你一个字符内单位的偏移量。我强烈建议你自己在纸上进行运算,看看这里的图片!

给TA打赏
共{{data.count}}人
人已打赏
解决方案

如何将ListBox项绑定到用户控件上?

2022-4-21 3:00:13

解决方案

字典映射返回Nan

2022-4-21 4:00:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索