任意数据长度的bitset,以及按位读写数据的函数
来源:互联网 发布:淘客cms微信系统 编辑:程序博客网 时间:2024/05/22 13:17
uint32_t bit_set(byte_t* data, size_t x, size_t bits, uint32_t value){ uint32_t mask; if(bits == 32){ reinterpret_cast<uint32_t*>(data)[x] = value; } else if(bits == 24){ mask = 0x00FFFFFF; data += x*3; uint32_t* p = reinterpret_cast<uint32_t*>(data); *p &= ~mask; value &= mask; *p |= value; } else if(bits == 16){ reinterpret_cast<uint16_t*>(data)[x] = value; } else if(bits == 8){ data[x] = value; } else if(bits < 8){ mask = (1<<bits)-1; x *= bits; data += x/8; value &= mask; x &= 7; value <<= x; mask <<= x; mask = ~mask; byte_t n = data[0]; n &= mask; n |= value; data[0] = n; } return 0;}
uint32_t bit_get(const byte_t* data, int x, int bits){ uint32_t mask; if(bits == 32){ return reinterpret_cast<const uint32_t*>(data)[x]; } else if(bits == 24){ mask = 0x00FFFFFF; data += x*3; const uint32_t* p = reinterpret_cast<const uint32_t*>(data); return *p & mask; } else if(bits == 16){ return reinterpret_cast<const uint16_t*>(data)[x]; } else if(bits == 8){ return data[x]; } else if(bits < 8){ mask = (1<<bits)-1; x *= bits; data += x/8; x &= 7; return (data[0]>>x) & mask; }}
这个bitset<>是c++bitset的扩展版,支持任意长度的数据
template<std::size_t BITSIZE>struct bitset{public: const static std::size_t byte_size = BITSIZE/8 + (BITSIZE&0x07 ? 1 : 0);public: bitset() { this->reset(); } size_t size()const { return BITSIZE; } bool bit(size_t id)const { return (data[id/8]>>(id&0x07))&0x01; }; bool operator[](size_t id)const { return this->bit(id); } void set() { memset(data, 0xFF, byte_size); } bool set(size_t id) { byte_t& b = data[id/8]; b |= 1<<(id&0x07); return true; } void reset() { memset(data, 0, byte_size); } bool reset(size_t id) { byte_t& b = data[id/8]; b &= ~(1<<(id&0x07)); return false; }public:byte_t data[byte_size];};
0 0
- 任意数据长度的bitset,以及按位读写数据的函数
- 数据缓冲的任意多位的读写操作
- recv返回值----任意长度的可读的数据
- 串口通信数据位长度对传输数据的影响
- 串口通信数据位长度对传输数据的影响
- 串口通信数据位长度对传输数据的影响
- 串口通信数据位长度对传输数据的影响
- 串口通信数据位长度对传输数据的影响
- BitSet类 操作 位数据
- android的数据储存以及读写
- 数据的保存、以及读写操作
- 利用bitset处理二进制格式的数据
- 计算数据的长度
- C++插入及取出队列数据可以任意修改设定的队列长度
- bitset用法 —— 修改一个字节的任意bit位
- bitset用法 —— 修改一个字节的任意bit位
- 关于数据的读写
- vtk数据的读写
- Codeforces 699 C. Vacations ( 贪心
- 292. Nim Game
- 用户层加载驱动 卸载驱动源码
- Flume 1.6 遇Emoji表情发生截断丢失数据问题分析
- 开源项目Meizhi学习笔记--工具类的收集
- 任意数据长度的bitset,以及按位读写数据的函数
- 像写文章一样使用 Kotlin
- c++ 字符串分割函数stringsplit
- 235. Lowest Common Ancestor of a Binary Search Tree
- 文件名匹配查找
- SSH免密登录
- LRU Cache -- Lintcode 134
- Java Quene
- 100. Same Tree