关于C语言的疑问

[复制链接]
3666|17
 楼主| jzxeagle 发表于 2010-5-14 08:54 | 显示全部楼层 |阅读模式
请问,有这样一个标准的库函数吗:
      原来的数据是0x55,转换后变为0xaa。就是说,整个8位数据颠倒过来。
谢谢!
hbicecream 发表于 2010-5-14 09:42 | 显示全部楼层
直接按位取反就行了
A = ~B;
 楼主| jzxeagle 发表于 2010-5-14 09:55 | 显示全部楼层
刚才举的例子特殊了。我的意思是8位数据整个颠倒过来。例如:0x23,转换后是0xc4
colinluan 发表于 2010-5-14 10:09 | 显示全部楼层
没有这样的库函数,至少我没见过,自己写个函数不就行了。
fengfeng 发表于 2010-5-14 10:39 | 显示全部楼层
自己写。。
zc3909 发表于 2010-5-14 12:20 | 显示全部楼层
没有现成的,自己写吧
iciciu 发表于 2010-5-14 13:45 | 显示全部楼层
先把CPU设置为大端写进去,然后再设置成小端,再读出来。。。。。。呵呵。。
hbicecream 发表于 2010-5-14 15:04 | 显示全部楼层
先把CPU设置为大端写进去,然后再设置成小端,再读出来。。。。。。呵呵。。
iciciu 发表于 2010-5-14 13:45


那ROM里的指令咋执行?



自己写个函数吧,不在乎效率就用移位,在乎效率就用查表
luffy59704331 发表于 2010-5-14 16:52 | 显示全部楼层
先把CPU设置为大端写进去,然后再设置成小端,再读出来。。。。。。呵呵。。
经典
哈哈
反质子 发表于 2010-5-14 17:39 | 显示全部楼层
本帖最后由 反质子 于 2010-5-14 17:48 编辑

反转字节 蝶形变换
哈哈以前看别人贴出来的 觉得有意思
handan586 发表于 2010-5-14 18:28 | 显示全部楼层
不太懂
vodka 发表于 2010-5-14 21:49 | 显示全部楼层
linux下网络通信主机端和net端类似有这样的转换函数 htons()
另外改变大小端的方法是错误的,大小端只是针对一个字中各个字节间而言的
kubuco 发表于 2010-5-14 22:07 | 显示全部楼层
那个大端小端想法不错。
李冬发 发表于 2010-5-14 23:31 | 显示全部楼层
大端小端办不到!
有意思 发表于 2010-5-15 01:51 | 显示全部楼层
uint8 bitinverse(uint8 x)
{
    x = (x >> 4) | (x << 4);
    x = (x >> 2 & 0x33) | (x << 2 & 0xcc);
    x = (x >> 1 & 0x55) | (x << 1 & 0xaa);
    return x;       
}
有意思 发表于 2010-5-15 01:56 | 显示全部楼层
  1. uint8 bitinverse(uint8 x)
  2. {
  3. x = (x >> 4) | (x << 4);
  4. x = (x >> 2 & 0x33) | (x << 2 & 0xcc);
  5. x = (x >> 1 & 0x55) | (x << 1 & 0xaa);
  6. return x;
  7. }

  8. uint16 bit16inverse(uint16 x)
  9. {
  10. x = (x >> 8) | (x << 8);
  11. x = (x >> 4 & 0x0F0F) | (x << 4 & 0xF0F0);
  12. x = (x >> 2 & 0x3333) | (x << 2 & 0xCCCC);
  13. x = (x >> 1 & 0x5555) | (x << 1 & 0xAAAA);
  14. return x;
  15. }


  16. uint32 bit32inverse(uint32 x)
  17. {
  18. x = (x >> 16) | (x << 16);
  19. x = ((x >> 8) & 0x00FF00FF) | ((x << 8) & 0xFF00FF00);
  20. x = ((x >> 4) & 0x0F0F0F0F) | ((x << 4) & 0xF0F0F0F0);
  21. x = ((x >> 2) & 0x33333333) | ((x << 2) & 0xCCCCCCCC);
  22. x = ((x >> 1) & 0x55555555) | ((x << 1) & 0xAAAAAAAA);
  23. return x;
  24. }
aresc 发表于 2010-5-15 08:06 | 显示全部楼层
int bit_reverse(int N, int m_bitWidth)
{

        int bitm;
        int bitrev_N = 0;
        for (bitm=1; bitm < (1<<m_bitWidth); bitm <<= 1)
        {
                if( N & bitm )
                {
                        bitrev_N++;
                }
                bitrev_N <<= 1;
        }
       
        return bitrev_N;
}
取m_bitWidth = 8就可以了,FFT变换中的按位反序。
xmar 发表于 2010-5-16 22:12 | 显示全部楼层
unsigned char bit_reverse(unsigned char m_bitWidth)
{
        unsigned char i, bitrev=0;
        for(i=0; i<8; i++) bitrev |= (1 & (m_bitWidth>>i))<<(7-i);
        return bitrev;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

98

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部