C/C++语言,对MSB、LSB的读/取处理
来源:互联网 发布:java实现弹出窗口保存 编辑:程序博客网 时间:2024/06/07 02:52
1. 做硬件的都知道,串口是LSB优先,I2C、1553B是MSB优先,这里的MSB、LSB指的是二进制位的位置,区别于【字节序】(通信中,先发送低字节,还是高字节的问题,那叫大端big-endian、小端little-endian)
如果需要自己来实现MSB、LSB的读取、转换,如何实现呢?下面给出C/C++程序:
#include "stdio.h"#define BITS_WIDTH(8)void main(){int val = 0;int i=0;////接收:MSB在最左边,先进来//for (i=0; i<BITS_WIDTH; i++){val<<=1;if(i==0 || i==7)//模拟第N位上有高位val++;}printf("接收MSB在最左边1,0x%x\n", val);////接收:MSB在最左边,先进来//val = 0;for (i=0; i<BITS_WIDTH; i++){if(i==0 || i==2)//模拟第N位上有高位{val |=1<<(BITS_WIDTH-1-i);}}printf("接收MSB在最左边2,0x%x\n", val);////接收:LSB在最左边,先进来//val = 0;for (i=0; i<BITS_WIDTH; i++){//模拟第N位上有高位if(i==0 || i==1){val |=1<<i;}}printf("接收LSB在最左边,0x%x\n", val);printf("\n");////发送: 先发送高位,后发送低位//val= 0x25;printf("发送数值0x%x按先高位后低位顺序: ", val);for (i=0; i<BITS_WIDTH; i++){if ((val&0x80) == 0)printf("0, ");else printf("1, ");val <<=1;}printf("\n");////发送: 先发送低位,后发送高位//val= 0x25;printf("发送数值0x%x按先低位后高位顺序: ", val);for (i=0; i<BITS_WIDTH; i++){if ((val&0x01) == 0)printf("0, ");else printf("1, ");val >>=1;}printf("\n");}
2. 字节序的大端、小端:
x86系统用的是小端(little-endian),简单说:就是“先存储低字节,后存储高字节”,或者说“先低后高”
例如:unsigned int xyz = 0x0A0B0C0D;
内存中,先存储的0x0D, 0x0C, 0x0B,......,就是上面说的“先低后高”
字节序大端和小端,参加另一篇文章:http://blog.csdn.net/dijkstar/article/details/6877575
0 0
- C/C++语言,对MSB、LSB的读/取处理
- c语言实现bit反转的最佳算法-从msb-lsb到lsb-msb
- 关于MSB和LSB的C语言操作
- MSB LSB转换处理
- 【续】关于对MSB/LSB写0时的步骤
- MSB与LSB的含义
- MSB LSB
- LSB,MSB
- LSB,MSB
- C语言文件处理-对图片取模数据的转换
- C语言对宏的处理
- 关于C语言中对数组取址的问题
- 关于C语言中对数组取地址的理解
- 什么是LSB,MSB
- LSB和MSB
- MSB与LSB
- 什么是MSB/LSB码?
- MSB and LSB
- 一元多项式的加减乘除运算,C++语言描述,数据结构实验
- 14 Best Open Source Web Application Vulnerability Scanners
- iOS开发之xib技巧介绍
- 软件
- 数据结构,多项式运算,C++,链表
- C/C++语言,对MSB、LSB的读/取处理
- C语言程序初体验-第十一课-第四题:玩数字
- JFreeChart(四.折线图.1)
- Unity5.1.1 AssetBundle的相关理解
- createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
- hibernate总结-映射
- 校验码——揭开海明校验码求解之谜
- java的join和yield方法处理线程顺序执行
- 随即抽取的小程序