如何修改5位二进制形式文本中的任意位并输出修改后的二进制文本
实现5位二进制文本的任意位反码替换功能
你的现有代码已经能将字符串转换为5位二进制加空格分隔的格式,下面是添加任意位反码替换功能的完整实现,支持两种定位方式:按全局有效位索引、按字符+位索引。
完整代码
#include <iostream> #include <string> #include <bitset> // 将字符串转换为5位二进制空格分隔的格式 std::string toBinary(std::string const &str) { std::string binary = ""; for (char const &c: str) { binary += std::bitset<5>(c).to_string() + ' '; } return binary; } // 方式1:按全局有效位索引翻转(索引从0开始,忽略空格) void flipArbitraryBit(std::string &binaryStr, size_t bitIndex) { size_t validBitCount = 0; for (size_t i = 0; i < binaryStr.size(); ++i) { char &ch = binaryStr[i]; if (ch == '0' || ch == '1') { if (validBitCount == bitIndex) { ch = (ch == '0') ? '1' : '0'; return; } validBitCount++; } } std::cerr << "错误:指定的位索引超出有效范围" << std::endl; } // 方式2:按字符索引+位索引翻转(字符/位索引均从0开始,位范围0-4) void flipCharSpecificBit(std::string &binaryStr, size_t charIndex, size_t bitPos) { if (bitPos >= 5) { std::cerr << "错误:位索引需在0-4之间" << std::endl; return; } // 每个字符占6个位置:5位二进制 + 1个空格 size_t targetPos = charIndex * 6 + bitPos; if (targetPos >= binaryStr.size()) { std::cerr << "错误:指定的字符索引超出范围" << std::endl; return; } char &ch = binaryStr[targetPos]; if (ch == '0' || ch == '1') { ch = (ch == '0') ? '1' : '0'; } else { std::cerr << "错误:目标位置不是有效二进制位" << std::endl; } } int main() { std::string str = "Hello world"; std::string binary = toBinary(str); std::cout << "原二进制文本:" << binary << std::endl; // 示例1:翻转全局第3个有效位(索引从0开始) flipArbitraryBit(binary, 2); std::cout << "全局位翻转后:" << binary << std::endl; // 示例2:翻转第1个字符('e')的第4位(索引从0开始) flipCharSpecificBit(binary, 1, 4); std::cout << "指定字符位翻转后:" << binary << std::endl; return 0; }
代码说明
- toBinary函数:保持原有逻辑,将每个字符转换为5位二进制字符串,并用空格分隔。
- flipArbitraryBit函数:遍历二进制字符串,跳过空格统计有效位,找到目标索引对应的位后进行0/1互转。
- flipCharSpecificBit函数:通过字符索引和位索引直接定位目标位(每个字符占6个位置:5位二进制+1个空格),更直观地修改指定字符的某一位。
- 主函数示例:展示了两种翻转方式的使用,你可以根据需求选择或扩展。
内容的提问来源于stack exchange,提问作者Ounw
相关产品推荐
相关产品推荐

