Python中整数移位及二进制串操作

最近一个项目涉及到电压数据的接收和可视化处理。其中电压数据是由FPGA通过TCP协议传输的二进制流,软件接收端需要安装数据帧格式进行解析后处理。由于嵌入式组的FPGA发送程序还处于调试阶段,软件接收端需要先自己写个TCP Server模拟数据发送。项目开发语言是Python
以下是数据帧格式的简单定义:

对此数据帧格式的定义其实我个人还是有些看法的!首先是一般数据帧都有header;然后是单通道数据只占用10bit,但是为了对齐32位补了12个零,有点浪费了。不过这个格式是嵌入式组定义的,也不好说什么啦 ?

那么第一个问题就是在Python中如何将20个bit的两个通道数据和12个bit的补领拼接在一起,形成一个32位的基本数据单元?搜了一下Python的文档,发现Python对二进制串处理相当不友好,根本不能进行类似字符串拼接这类的操作。一筹莫展之下请教了一下大牛,发现自己对于二进制位操作是真的一窍不通!计算机组成原理算是白学了:( 下面进入正题,如何从十进制整数进行位移操作转换为上面截图所示的数据帧格式。

由FPGA传输过来的电压数据是一个无符号整型(实际电压数据是浮点数,而且有正负,后续还有一个转换的算法,这里不继续透露了),那么假设我们有个通道的电压数据为十进制整数16,该整数转换为32位的二进制数应该是00000000 00000000 00000000 00010000,至于十进制和二进制是如何转换的,如果不会,可以打开文末的参考网站,上面有提供在线转换。我们帧格式定义里面一个通道的数据位是10位,那么该通道的电压数据转为10位二进制数应该是0000010000。如何将这10位二进制数和最后我们需要的32位二进制数拼接起来呢?很简单,我们只需要进行一次移位操作就可以得到了:将16左移22位即可!移位后的二进制串为00000100 00000000 00000000 00000000,其对应的十进制数值为67108864。接下来我们随机产生第二个通道的数据,假设为十进制整数12,其对应的32位二进制数为00000000 00000000 00000000 00001100,问题是如何将12和16在保证顺序和值正确的情况下拼接起来呢?对于我们的目标数据,是一个32位的二进制串,我们的第一个通道数据已经占据了该二进制串的前十位,那么第二个通道的数据应该是从第11位开始。所以第二个通道的数据我们左移位数不是22,而是12。将第二个通道的10bit数据左移12位后得到00000000 00000000 11000000 00000000,其对应的十进制数为49152。移位后的数值和原始数字完全不一样了怎么办?不要慌,这里我们暂时不要关心移位后的数值大小。接下来是关键的一步:将两个通道的数据拼接起来。怎么拼接?直接相加或者做或运算即可!第一个通道移位后的数值67108864加上第二个通道移位后的数值49152后得到67158016,将67158016转换为32位二进制串为0000010000 0000001100 000000000000。仔细看,这个32位二进制串的前十位即为第一个通道的数据0000010000,接下来十位的数据即为第二个通道的数据0000001100,最后十二位即为补的零。是不是很神奇 ?

接下来将该二进制串使用socket发送,然后接收端再进行右移位反序操作即可解出通道的数据,这里不再继续下去了。

以下是移位操作的简单过程

c1 = 16
b_c1 = c1 << 22
c2 = 12
b_c2 = c2 << 12print(b_c1)
print(b_c2)
print(b_c1 + b_c2)
print(bin(b_c1 + b_c2))

以下是二进制和整数的相互转换:

# 整数转二进制:
# 1. 采用%2的方式计算
# 2. 采用python自带了方法 bin.
# 比如bin(10) 回返回字符串'0b1010' ,只留下'0','1'序列需要把'0b'去掉.
# bin(number).replace('0b','') 或bin(number)[2:]>>> bin(10)  # 为了下边表示方便 放入t中
'0b1010'# 二进制转整数:
>>> int(t[2:],2)
10

References:

  1. 在线进制转换:http://www.binaryconvert.com/index.html
  2. python二进制和整数相互转换:https://blog.csdn.net/a1628864705/article/details/52884441

Python中整数移位及二进制串操作相关推荐

  1. 【Python中整数进制的转换】

    [小白从小学Python.C.Java] [Python-计算机等级考试二级] Python中整数进制的转换 选择题 在Python3.9中,以下python代码输出什么? myNumber = 10 ...

  2. python求三个整数最大值_实例讲解Python中整数的最大值输出

    实例讲解Python中整数的最大值输出 在Python中可以存储很大的值,如下面的Python示例程序: x = 1000000000000000000000000000000000000000000 ...

  3. python对文件的读操作有哪些方法-Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...

  4. python对文件的读操作方法有哪些-Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 wi ...

  5. python应用中调用spark_在python中使用pyspark读写Hive数据操作

    1.读Hive表数据 pyspark读取hive数据非常简单,因为它有专门的接口来读取,完全不需要像hbase那样,需要做很多配置,pyspark提供的操作hive的接口,使得程序可以直接使用SQL语 ...

  6. python中能够处理的最大整数是_实例讲解Python中整数的最大值输出

    在Python中可以存储很大的值,如下面的Python示例程序: x = 10000000000000000000000000000000000000000000; x = x + 1 print ( ...

  7. c语言 整数转二进制取位,C语言位运算--将整数转换成二进制串以及反转整数后N位...

    // c primer plus上的内容,位运算 #include char * itobs (int n,char * ps); void show_bstr(const char *); int ...

  8. python语言中整数1010的二进制表示_爱校码 - Python 语言基础二

    Python中基本的数据类型有Number(数字).String(字符串).List(列表).Tuple(元组).Dictionary(字典).Set(集合)等. 用type()可以查看变量和常量的数 ...

  9. python 二进制数 转字符串_Python二进制串转换为通用字符串的方法

    一个小问题 今天在做一个实验时,需要对一个包含中英文词汇的TXT文件进行读入和整理. Python代码的编码规则为UTF-8.在读入时,文件的每行是二进制串,形如: b'heroesxff..... ...

最新文章

  1. 编译器设计-RunTime运行时环境
  2. 万能android调用webservice方法——参数类型不受限制
  3. HarmonyOS之公共事件的发布、订阅与退订
  4. 禁止 VMware Fusion 自动调整 Windows 分辨率
  5. 18款帝豪gl车机升级_提车2020款帝豪GL,空间也不错,动力也够用的
  6. 中国人口较少民族作家研讨会
  7. Hadoop入门(三)HDFS API
  8. template 模板是怎样通过 Compile 编译的
  9. 【华为云技术分享】Entity Framework Core 捕获数据库变动
  10. 手机 modem开发(22)---modem 通信 -- 几模 几频
  11. 基于itchat实现微信群消息同步机器人
  12. 状态反馈控制与状态观测器设置以及利用LQR方法求取状态反馈矩阵
  13. 《JavaScript DOM编程艺术》知识整理
  14. 谈网页游戏外挂之用python模拟游戏(热血三国2)登陆
  15. 搜索神器Android,网盘搜索神器
  16. 月之数 HDU2502
  17. 男孩女孩和他们的父母的有趣问题
  18. pdf转html在线预览,PDF转html
  19. 容器学习Day11-docker commit构建容器镜像
  20. 一、浙江专升本高等数学考点-函数

热门文章

  1. 华硕B85MG主板+I5-4570+HD 4600
  2. 【520大礼包】《Scratch趣味编程进阶——妙趣横生的数学和算法》免费送啦!
  3. 【APP逆向】模拟器绕过TCP+美团frida爬虫【个人记载】
  4. 常用选股公式编写样例
  5. 一款非常好玩的小程序游戏推荐给大家,基于cocos creator引擎开发的
  6. 【1024杯】web
  7. 80秒的语音芯片有哪些?看这里~
  8. 图片处理不用愁,给你十个小帮手
  9. asp.net千奇百怪的日历【月儿原创】
  10. 【UGUI】制作艺术字体