当前位置:首页 > 技术心得 > 正文内容

二进制逆序(字节反转)

xjtudll13年前 (2013-09-23)技术心得55121

  理论分析  

二进制逆序,顾名思义就是将低位和高位交换,例如0x23 = 0010 0011 B,逆序后就是1100 0100 B。字节反转在“小端”格式和“大端”格式之间的数据转换是一个必要的操作。

一种比较笨的办法就是将字节里的每一位提取出来,再重新组合,这种方法较为耗费时间,对低端单片机而言极为不利。实际上通过与运算(&)和移位运算,可以轻松的做到这一点。

主要原理:先交换每相邻两位上的数,以后把互相交换过的数看成一个整体,继续进行以2位为单位的交换操作,之后以4为单位,以此类推。

211= 11010011 B为例:

+---+---+---+---+---+---+---+---+

| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |           <---原数

+---+---+---+---+---+---+---+---+

|  1 1  |  1 0  |  0 0  |  1 1  |   <---第一次运算后

+-------+-------+-------+-------+

|    1 0 1 1    |    1 1 0 0    |   <---第二次运算后

+---------------+---------------+

|        1 1 0 0 1 0 1 1        |   <---第三次运算后

+-------------------------------+

  程序实现  
   2.1 C语言代码  

/*

 ****************************************************************/

/**

** @brief 二进制逆序

** @details 将一个数的高低位交换例如00111001B转成10011100B

** @param[in,out] *s -uchar,需要逆序的数据

** @note

*/

***************************************************************/

void VLBinSwap(uchar *s)

{

 uchar temp1,temp2,temp3;

temp1 = ((*s)&0x55)<<1;

temp2 = ((*s)&0xAA)>>1;

 temp3 = (temp1|temp2);

temp1 = (temp3&0x33)<<2;

 temp2 = (temp3&0xCC)>>2;

temp3 = (temp1|temp2);

 temp1 = (temp3&0x0F)<<4;

 temp2 = (temp3&0xF0)>>4;

 (*s) = (temp1|temp2);

}

2.2 tenx汇编代码

tenx(十速)是四位机,所以举例是4bits交换。

;////////////////////////////////////////////////////////////////

;Function: 交换二进制高低位

;Description: 占用寄存器R1,R0

; Example1:  0010->0100

; Example2:  1100->0011

;Input: R0

;Output: R0(转换后)

;//////////////////////////////////

;//调用示例

; CALL gSysBINSwap

;------------------------------

gSysBINSwap:

MRW R1,R0

ANDI* R0,0101B

SL0 R0

ANDI* R1,1010B

SR0 R1

OR* R0 ;//R0 OR R1

MRW R1,R0 ;//R0R1存储变换第一次的值

ANDI* R0,0011B

SL0 R0

SL0 R0

ANDI* R1,1100B

SR0 R1

SR0 R1 

OR* R0

  RTS

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://xjtudll.cn/Exp/283/

标签: 算法单片机
分享给朋友:

“二进制逆序(字节反转)” 的相关文章

解决IIS 不能下载.exe.config文件的方法

解决IIS 不能下载.exe.config文件的方法

  问题: 做了一个winform自动升级功能,通过http协议下载更新,发现每次得到的config文件字节都是0 原因: config文件默认不能通过浏览器下载。 分析及解决办法: Config文件是web的配置文件,默认是不允许下载的,就算在MIME中配置“applicat...

SVN项目库错误Unsupported FS format svn: Expected FS format between '1' and '4'; found format '6'

SVN项目库错误Unsupported FS format svn: Expected FS format between '1' and '4'; found format '6'

问题: 利用SVN Dump版本库,命令行老是一闪而过 bat文件代码如下: cd .. F:\SubversionDB\websoft\svnserver\svnadmin.exe dump F:\SubversionDB\svn_repo\OSAL_51/ > f:/1.dump 这个ba...

Word转pdf

Word转pdf

为了通用:把一篇文章转成PDF后,读者无论在Unix还是Windows,无论是否有中文字体,都可以正常阅读。 为了美观:你精心排版的文件转成PDF后,对方在屏幕上看到的与你完全一样,不会有重新换行/字体/之困挠。 为了安全:在PDF文件中,你可以做到打开要密码,不允许修改、复制、打印…...

Protel99SE检查遗漏的封装

Protel99SE检查遗漏的封装

画原理图的时候,封装是要填写的。有的人习惯元件放置后立即填写,有的人习惯原理图画好后,再去填写所有的。但是不论哪种方式,都不可避免的会遗漏一些封装未填写,这样在导入到PCB的时候就会有些小麻烦。所以有必要在原理图完成后检查封装是否遗漏。检查封装的捷径方法就是利用导出电子表格命令将元件封装输出到电子表...

金蝶K3实际成本各种计算方法的区别及举例

金蝶K3实际成本各种计算方法的区别及举例

http://blog.sina.cn/dpool/blog/s/blog_166bf582c0102wzcl.html 实际成本各种计算方法的区别及举例 K3WISE实际成本包含四种计算方法,分别是品种法、分步法、分批法和分类法。品种法可视同为分步法的一种特殊情形,即没有中间产品,材料一步...

OKI单片机——ML610Q4XX PWM

OKI单片机——ML610Q4XX PWM

  /***********************************************/ * @brief 初始PWM 引脚 * @details /***********************************************/ void P43_Init...

评论列表

小易
小易 IP:湖北省
13年前 (2013-09-23)

原来,如此

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。