首页 > 解决方案 > C根据其当前值更改char字节中的特定位

问题描述

类似的问题在 Stack over 周围被问了很多次,但我真的找不到任何地方可以回答这个特定的情况。我有一个字符,它当然有二进制表示。我用这种方法打印它:

void print_binary(unsigned char x) {
    int b = 128;

    while (b != 0) {
        if (b <= x) {
            x -= b;
            printf("1");
        } else
            printf("0");
        b = b >> 1;
    }
}

我有一些字符:

char c = 'c';

现在,我需要能够翻转任何字符/字节中的特定位。要真正拼出它,我需要一个具有此签名的函数:

char flip_bit(int idx, char c) { 所以,我给它一个字符和一个索引。然后它应该在索引处翻转该位,并返回一个新字符。

对我不起作用的解决方案

在类似的问题中,已经给出了一些我不能专门用于这个问题的解决方案:

int mask = 0x90; // 10010000
int num  = 0xE3; // 11100011
num ^= mask;    

这不起作用,因为我需要动态地执行此操作,并且不能硬编码每个字节以供 xor'ring 使用。如果有人可以告诉我如何在上述功能中实现这一点,那就太好了。

或者这个解决方案:

char c = 'c';
c |= 1UL << 4;

这适用于将第 4 位从 0 翻转到 1。但我不能让它反过来工作。我还需要一些东西,我不需要指定它应该变成 1 还是 0,而只是翻转它。

c |= 0UL << 4; # this has no effect

有人不能帮助我吗?

编辑:这个问题已经结束,因为它听起来很像这个问题,但是,如果有人花时间阅读我在这里写的内容,你会注意到针对该问题提出的解决方案都不符合我的规范已经写了

标签: c++c

解决方案


推荐阅读