精华内容
下载资源
问答
  • Python字节某一位的值,设置某一位的值,二进制位操作在物联网实际应用项目开发中,为了提升性能,与设备端配合,往往最终使用二进制字节串方式进行通信协议封装,更会把0和1、True和False、Yes和No这样...

    Python读字节某一位的值,设置某一位的值,二进制位操作

    在物联网实际应用项目开发中,为了提升性能,与设备端配合,往往最终使用的是二进制字节串方式进行的通信协议封装,更会把0和1、True和False、Yes和No这样的布尔值每8个只占用一个字节,用字节中的位来表示。减少传输量,减少对网络稳定性的要求。这就带来了要怎么读某个字节中每一位的值和怎么设置每一位的值的问题。

    这几天再写培训演示代码,顺便就写了两个函数,解决字节位值读写问题,现在分享给大家。

    下面直接上代码,在Python3上测试通过:

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    def get_bit_val(byte, index):

    """

    得到某个字节中某一位(Bit)的值

    :param byte: 待取值的字节值

    :param index: 待读取位的序号,从右向左0开始,0-7为一个完整字节的8个位

    :returns: 返回读取该位的值,0或1

    """

    if byte & (1 << index):

    return 1

    else:

    return 0

    def set_bit_val(byte, index, val):

    """

    更改某个字节中某一位(Bit)的值

    :param byte: 准备更改的字节原值

    :param index: 待更改位的序号,从右向左0开始,0-7为一个完整字节的8个位

    :param val: 目标位预更改的值,0或1

    :returns: 返回更改后字节的值

    """

    if val:

    return byte | (1 << index)

    else:

    return byte & ~(1 << index)

    print(get_bit_val(3, 2)) # 3的2进制00000 0 11,2号位是0,打印结果0

    print(get_bit_val(3, 1)) # 3的2进制000000 1 1,1号位是1,打印结果1

    print(get_bit_val(3, 5)) # 3的2进制00 0 00011,5号位是0,打印结果0

    print(set_bit_val(3, 2, 1)) # 3的2进制00000 0 11,2号位改成1,打印结果7(00000111)

    print(set_bit_val(3, 1, 0)) # 3的2进制000000 1 1,1号位改成0,打印结果1(00000001)

    print(set_bit_val(3, 5, 0)) # 3的2进制00 0 00011,5号位改成0,打印结果3(00000011)

    """

    控制台输出:

    0

    1

    0

    7

    1

    3

    """

    展开全文
  • 二进制、八进制、十进制、十六进制之间转换一、十进制与二进制之间的转换(1)十进制转换为二进制,分为整数部分和小数部分①整数部分方法:除2取余法,即每次将整数部分除以2,余数为该权上的数,而商继续除以2,...

    二进制、八进制、十进制、十六进制之间转换

    一、十进制与二进制之间的转换

    (1)十进制转换为二进制,分为整数部分和小数部分

    ①整数部分

    方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。下面举例:

    例:将十进制的168转换为二进制

    得出结果将十进制的168转换为二进制,(10101000)2

    分析:第一步,将168除以2,商84,余数为0。

    第二步,将商84除以2,商42余数为0。

    第三步,将商42除以2,商21余数为0。

    第四步,将商21除以2,商10余数为1。

    第五步,将商10除以2,商5余数为0。

    第六步,将商5除以2,商2余数为1。

    第七步,将商2除以2,商1余数为0。

    第八步,将商1除以2,商0余数为1。

    第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000

    (2)小数部分

    方法:乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分

    为零为止。如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。换句话说就是0舍1入。读数要从前面的整数读到后面的整数,下面举例:

    例1:将0.125换算为二进制

    得出结果:将0.125换算为二进制(0.001)2

    分析:第一步,将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25;

    第二步, 将小数部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5;

    第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0;

    第四步,读数,从第一位读起,读到最后一位,即为0.001。

    例2,将0.45转换为二进制(保留到小数点第四位)

    大家从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好

    展开全文
  • Json传二进制

    千次阅读 2009-07-10 23:18:00
    如果要把从服务器的二进制数据(数组)用Json格式传到客户端,不知道大家一般怎么处理这样情况。我用了一个土方法,把二进制数据格式化为二16进制数的字符形式:如(C++代码):for(int i=0;i sprintf(temp,"%...
    展开全文
  • java 二进制操作

    2012-04-19 11:14:04
    我有一个二进制文件,我把他到byte数组中   我想取出其中32,把他转换成String显示,如“10111110000010011000000001000100” 然后去掉高2(如例中“10”) 剩下30(例中...
  • 首先展示了二进制向十进制的转换巩固了在课堂上的知识。此外还了解到。 IC的特性,导致了计算机的信息数据只能用二进制来处理。 移位运算中,左移产生的低位由零来补足。同时移位运算也可以通过数位移动来代替乘法...

    第二章主要是讲解的二进制

    首先展示了二进制向十进制的转换巩固了在课堂上的知识。此外还了解到。

    IC的特性,导致了计算机的信息数据只能用二进制来处理。

    移位运算中,左移产生的低位由零来补足。同时移位运算也可以通过数位移动来代替乘法运算和除法运算。

    逻辑右移:当二进制表示图形模式而非数值时移位后需在最高位补零。

    算术右移:将二进制作为带符号的数值进行运算时,移位后要在最高位填充移位前符号位的值(0或1)

    (只有右移才需要区分算术右移和逻辑右移)

    转载于:https://www.cnblogs.com/zawpl/p/10327229.html

    展开全文
  • 了后面之后才意识到一些十进制的小数无法用二进制表示,导致运行结果与实际想要的结果有差错。同时作者补充了两种避免计算出错的方法。 本章还讲解了二进制小数如何转化为十进制,同样是将各数位数值和和位权相乘...
  • 将0.1累加100次也得不到10出错原因是,是因为有一些十进制数的小数无法转换成二进制数。例如十进制,0.1就无法用二进制数正确表示,小数点后面即使有几百也无法表示。接下来我们看一个例子,表示一下不能种...
  • 用1字节(=8)表示字节数据有256种,用二进制数来表示话,其范围就是0000 0000~1111 1111。如果文件中存储数据是文字,那么该文件就是文本文件。如果是图形,那么该文件就是图像文件。在任何情况下,文件中...
  • IPv4 全称为 Internet Protocol version 4,它为互联网上每一个网络和每一台主机分配一个逻辑地址,IP 地址是一个 32 位的二进制数,算下来其实也只有 2^32 个地址,这些地址中有分为 A、B、C、D、E 5 类,而比较...
  • 对于计算机来说,它只认识二进制,也就是0和1,那我们开发过程中所使用的整数(大多是10进制)在计算机中是怎么存储成二进制的呢?本文将详细解读Java整数在计算机中的存储原理。整数的编码方式整数的编码分为原码、...
  • 每个数字都可以转换成三位二进制数,这三位二进制数分别代表了该角色r,可写w,可运行x权限。 数字 二进制 权限 字母 7 111 可,可写,可运行 r w x 6 110 可,可写,不可运行 r w - 5 101 ...
  • 众所周知,在电路和计算机里是按0/1来存储数据的,比如15对应二进制的1111,但是小数是怎么表示呢? 数字0.001我们可以约定一个量程系数, 比如1000, 这样仪表的读数是1,则代表着1/1000=0.001我们来看一个仪表的说明书,...
  • 软件Synergy与按键读数冲突-因此,在使用GLIntercept这些功能时,请禁用Synergy。 然后在安装后,只需将opengl32.dll和gliConfig.ini文件从安装目录复制到要拦截OpenGL调用应用程序可执行文件夹中。 然后...
  • 通常做上层应用不太关注这个,正负数在存储中是怎么存储的,其实应该学计算机文化基础的时候就应该有学过这个,只是当时并没有太理解这个东西....其他存放该二进制的绝对值。 反码:正数的...
  • 给出n个,求在这n个中取两个使得他们异或最大 解题思路 ...3. 思考一阵(在不知道用什么算法情况下),会不会用把每个转换为二进制,然后按进行比对  4. 就算转换为二进制之后,怎么进行按个
  • 传送门:Find MaxXorSum题目大意给出n个,求在这n个中取两个使得他们异或最大解题思路非常...3. 思考一阵(在不知道用什么算法情况下),会不会用把每个转换为二进制,然后按进行比对 4. 就算转换为二进制
  • 各位前辈,最近我到Prime5中关于流状态一段文字和代码感到很疑惑 “带参数clear版本接受一个iostate值,表示流新状态。为了复位单一条件 状态,我们首先应用rdstate读出...可以用二进制数表示出来吗?
  • 这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域对齐方式? 2.14 为什么sizeof返回值大于结构大小期望值,是不是尾部有填充? 2.15 如何确定域在结构中字节偏移量...
  • 那计算机怎么懂我们给它发出的的信息呢?此时就需要编写一套由字符、数字所组成并按照某种语法格式一串串计算机指令,而这些计算机指令就是计算机语言。 软件就是由若干条计算机指令所组成。 计算机语言...
  • 这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域对齐方式? 27  2.14 为什么sizeof返回值大于结构大小期望值,是不是尾部有填充? 28 2.15 如何确定域在结构中...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域对齐方式? 27  2.14 为什么sizeof返回值大于结构大小期望值,是不是尾部有填充? 28 2.15 如何确定域在结构中...
  • 仔细题才发现,这道题意思是找到一个n位的二进制数i,让它与n组给定数据进行&操作,如果操作完后n组数据任不同,则i是可取,但是我们要取是n为数字中1数目最少i。*/ 1 #include"iostream" ...
  • 这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域对齐方式? 56 2.14 为什么sizeof返回值大于结构大小期望值,是不是尾部有填充? 57 2.15 如何确定域在结构中字节...
  • 这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域对齐方式?  2.14 为什么sizeof返回值大于结构大小期望值,是不是尾部有填充?  2.15 如何确定域在结构中字节...
  • 这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域对齐方式? 2.14 为什么sizeof返回值大于结构大小期望值,是不是尾部有填充? 2.15 如何确定域在结构中字节偏移...
  • 这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域对齐方式? 2.14 为什么sizeof返回值大于结构大小期望值,是不是尾部有填充? 2.15 如何确定域在结构中字节偏移量?...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

二进制的数位怎么读