gpt4 book ai didi

c - C中的位重排/操作

转载 作者:太空狗 更新时间:2023-10-29 16:11:15 25 4
gpt4 key购买 nike

我想排列一个字节中的位,以产生特定的顺序。例如,如果起始字节如下 0 1 1 0 1 0 1 0,位标记为 1 2 3 4 5 6 7 8,我想对其进行排列,使其与以下位置匹配:2 4 3 5 7 1 8 6 结果为:1 0 1 1 1 0 0 0。最有效的方法是什么?我阅读了有关“查找”表的信息,但我不确定它是如何工作的。有人可以举一个例子并解释在 C 中进行这种位重排的有效方法吗?

最佳答案

您可以创建一个包含 256 个条目的“unsigned char”数组。该数组的索引将是要转换的字节的当前值,而该条目的值将是“转换后的”值。

或者,您可以使用位掩码和“if”语句……但效率会降低。

这是“数组”方法的片段……只定义了几个值……...并且没有输出“二进制文本”格式的输出。

#include<stdio.h>

unsigned char lkup[256] =
{ 0x00, /* idx: 0 (0x00) */
0x02, /* idx: 1 (0x01) (0b00000001) */
0x08, /* idx: 2 (0x02) (0b00000010) */
0x0a, /* idx: 3 (0x03) (0b00000011) */
0x01 /* idx: 4 (0x04) (0b00000100) */
};

int main(int argc, char **argv)
{
unsigned char wk = 3;

printf("Input: %u output: >%u\n", wk, lkup[wk]);
}

关于c - C中的位重排/操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33864496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com