c - 在 C 中与 char 类型进行位交换

标签 c char bit-manipulation swap

数据类型为char,格式如下:

源字节:[0][1][2][3][4][5][6][7]

目的地:[6][7][4][5][2][3][0][1]

例如,如果我将一个 char,29 传递给这个函数,它将进行交换并返回一个 char 类型的值,即 116。

如何进行交换?

谢谢。

========================

只是想知道我是否可以这样做?

unsigned char mask = 128;
char num = 0, value1 = 29;
int i, a;

for(i = 0; i < 8; i++) {
  if (i == 0 || i == 1 || i == 6 || i == 7)
    a = 6;
  else
    a = 2;

  if(i < 4)
    num = ((value1 & mask) >> a);
  else
    num = ((value1 & mask) << a);

  result = (result | num);

  if(i<7)
    mask = mask >> 1;
}

最佳答案

我通常用另一种方式对位进行编号——因此位 0 是 LSB。按照您的编号方案:

unsigned char src = 29;
unsigned char dst = 0;
dst = (((src & 0x80) >> 6) | // bit 0
       ((src & 0x40) >> 6) | // bit 1
       ((src & 0x20) >> 2) | // bit 2
       ((src & 0x10) >> 2) | // bit 3
       ((src & 0x08) << 2) | // bit 4
       ((src & 0x04) << 2) | // bit 5
       ((src & 0x02) << 6) | // bit 6
       ((src & 0x01) << 6) // bit 7
      );

当然,除非您“以正确的方式”对它们进行编号,但“向后”绘制它们——然后只需颠倒我上面所做的即可。 (并不是说我想在这里开始一场宗教 war ......)

关于c - 在 C 中与 char 类型进行位交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917613/

相关文章:

php - 如何使用按位系统允许某些权限而不允许其他权限?

c - 将char指针写入文件,读取文件并检查大小?

c - 此 C 代码如何返回枚举?

javascript - 如何比较存储在数组中的单独字符串值的字符? JavaScript

java - 使用 ascii 码检查空格

c# - 在 C# 中的位移位中捕获丢失的字节

c++ - 使用 gcc 的线程清理器在启动时会产生各种错误

c++ - 找出数组中最小的数及其所在的位置

c - 二维字符数组动态重新分配失败

java - 如何使用按位运算符将多个整数值传递给 Java 函数?