You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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;
}

代码说明

  1. toBinary函数:保持原有逻辑,将每个字符转换为5位二进制字符串,并用空格分隔。
  2. flipArbitraryBit函数:遍历二进制字符串,跳过空格统计有效位,找到目标索引对应的位后进行0/1互转。
  3. flipCharSpecificBit函数:通过字符索引和位索引直接定位目标位(每个字符占6个位置:5位二进制+1个空格),更直观地修改指定字符的某一位。
  4. 主函数示例:展示了两种翻转方式的使用,你可以根据需求选择或扩展。

内容的提问来源于stack exchange,提问作者Ounw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:01:09