【发布时间】:2013-02-25 04:20:14
【问题描述】:
我正在寻找一种方法来反转字符数组中的字节。我还需要反转正在交换的字节的各个位,然后再将它们放置在正确的位置。 例如,假设我有一个 char arr[1000],其 arr[0] = 00100011 和 arr[999] = 11010110,我想交换 arr[0] 和 arr[999] 并反转它们中的每个位。所以输出将是 arr[999]= 11000100(arr[0] 的反转位)和 arr[0] = 01101011(arr[999] 的反转位)。
我有一些代码可以在一个字节内进行位反转:
static char reverseByte(char val)
{
char result = 0;
int counter = 8;
while (counter-- < 0)
{
result <<= 1;
result |= (char)(val & 1);
val = (char)(val >> 1);
}
return result;
}
但这意味着运行一个外部循环来进行字节交换,然后为内部的每个字节运行上面的小循环,即在上述情况下为 1000。这是正确的方法吗?有没有更好的方法来实现这一目标? 任何帮助将不胜感激。
【问题讨论】:
-
您要优化什么以实现“高效”?这不能比
O(n)时间和空间(按位的顺序)做得更好。现在,在某些情况下,系数可能比其他情况下更好。 -
什么?你不需要递归吗? (查找表可能是最快的。)
-
@RageD 我正在大字符数组上尝试此操作,并希望反转字节中的各个位