24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1072  |  回复: 2
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

hu123rong00

铜虫 (小有名气)

[求助] 位倒序——半字节查表法

我想实现一个字节的倒序,例如  11001100  ---->  00110011.
用半字节查表法怎么做啊?请高手讲解一下原理?或者还有其他快速的算法
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xqc1123

银虫 (小有名气)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
hu123rong00: 金币+3, 有帮助 2012-03-27 15:09:17
楼主我想到一个算法,具体代码还需要楼主自己实现:

1.将字节序列存储在一个char数组里,或者根据字节个数动态生成数组,保存数组大小N(如果字节序列是根据一个整数生成还要写一个将10进制转换为二进制的函数,楼主可以在网上找找)

2.如果N为奇数,数组中间元素不变,取中间元素两边的子数组互换位置

3.对每个需要互换位置的子数组循环执行2步骤,直到子数组元素为一个时返回
(这里楼主可以写一个函数,接受一个char指针和子数组大小.然后迭代求解)

飞鱼的眼泪,大海懂~~
3楼2012-03-07 09:15:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 3 个回答

sudo

木虫 (正式写手)

就是从0000到1111的倒序先保存在一个数组中,比如:
CODE:
0000 -> 0000
0001 -> 1000
0010 -> 0100
...

于是这个数组就是:
CODE:
i   rev[i]
0   0
1   8
2   4
...

构造好数组rev后,就可以这么查表了:
CODE:
unsigned char byteReverse(unsigned char b){
        return (rev[b&0xF]<<4) | rev[b>>4];                //注意rev如果不是有符号或无符号型int数组的话,需要强制转换一下
}

2楼2012-03-07 09:14:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见