bitset::to_string()可直接转高位在前的二进制字符串;手动遍历支持反向、分隔符和字符替换;转十六进制需依位数选择to_ulong()/to_ullong()或4位切片查表。
只要 bitset 的模板参数是编译期确定的(比如 bitset、bitset),就能直接调用 to_string() 得到一个 std::string,内容是高位在前的二进制字符序列。
b[ N-1 ]),符合直观阅读习惯bitset),to_string() 会一次性分配完整内存,无渐进式优化std::bitset<4> b("1010");
std::string s = b.to_string(); // s == "1010"当需要反向顺序(低位在前)、插入分隔符、或替换字符时,必须放弃 to_string(),改用循环读取每位。
b[i] 取第 i 位(i=0 是最低位),注意和 to_string() 的顺序相反i = b.size()-1 到 0),避免最后 reversestd::string::reserve(b.size()) 预分配空间,防止多次扩容std::bitset<6> b(0b110011);
std::string s; s.reserve(b.size());
for (int i = b.size()-1; i >= 0; --i) {
s += b[i] ? '1' : '0';
}
// s == "110011"bitset 提供 to_ulong() 和 to_ullong(),但仅当位数 ≤ sizeof(unsigned long) * 8 或 ≤ 64 时安全;超出会抛 std::overflow_error。
to_ulong() + std::hex 流即可to_ulong() 返回值是数值,不是字符串;高位零会被自动省略(如 bitset("00001010").to_ulong() 得 10,不是 "0A")std::bitset<8> b("00001010");
std::ostringstream oss;
oss << std::hex << std::setw(2) << std::setfill('0') << b.to_ulong();
std::string hex = oss.str(); // "0a"std::bitset 的大小必须是编

bitset 中 N 是变量的情况。如果真有动态需求,得换用 std::vector 或 boost::dynamic_bitset,它们没有 to_string() 成员函数。
int n = 8; std::bitset b; 是非法 C++,编译失败vector 调用 to_string() 会报错:no member named 'to_string'dynamic_bitset,得手写循环或调用其 to_string()(注意它默认低位在前,和标准 bitset 相反)真正容易被忽略的是:to_string() 返回的字符串长度恒等于 bitset 模板参数,哪怕所有位都是 0 —— 它不会截断前导零。如果你要“紧凑二进制表示”,必须自己跳过开头的 '0',但要注意全零时至少保留一个 '0'。