如果我有一个类似的位置:
std::bitset<8> bs = 00000101;
我怎样才能检索bitset&#34; 101&#34;从bs?为了简单起见,我已经知道我需要前三位。
在@ Baum的帮助下,我到目前为止有这样的事情:
std::bitset<8> bs = 00000101;
int off = 3; // the number of bits I would like
std::string offStr; // final substring of bitset I wanted
for (std::size_t i = 0; i < off; ++i)
{
offStr += bs[i];
}
return offStr; // resulting substring
答案 0 :(得分:0)
如果您
,它将起作用尝试以下方法:
std::bitset<8> bs(5);// = 00000101;
int off = 3; // the number of bits I would like
std::string offStr; // final substring of bitset I wanted
for (std::size_t i = 0; i < off; ++i)
{
offStr += (bs[i] ? "1" : "0");
}
但请注意,如果您使用std::string::operator+=
,则位数将按错误顺序排列,因此要么更改循环,要么更好,预先分配字符串并使用operator[]
。
答案 1 :(得分:0)
您也可以尝试以下方法:
using namespace std;
bitset<8> bs(5);// = 00000101;
int off = 3; // the number of bits I would like
string offStr = bs.to_string().substr(8-off,off); // final substring of bitset I wanted
答案 2 :(得分:0)
#include <iostream>
unsigned int clip(unsigned int bitset, const unsigned int offset){
static const unsigned int integer_bitsize = sizeof(unsigned int) * 8;
if(offset >= integer_bitsize) return bitset;
bitset <<= (integer_bitsize - offset);
bitset >>= (integer_bitsize - offset);
return bitset;
}
int main(int argc, char *argv[]){
int a = clip(5, 3);
int b = clip(13, 3);
std::cout << a << " " << b << std::endl;
return 0;
}
使用移位运算符效果很好。只要确保使用 unsigned int。