我如何显示一个字节的位长,而不是整数

Posted

技术标签:

【中文标题】我如何显示一个字节的位长,而不是整数【英文标题】:how do i show bit length of a byte, NOT Integer 【发布时间】:2021-11-29 17:51:49 【问题描述】:

#Python 3+

我读取 bin 字节 读取大小 =1

open(ArgsFile, "rb") as f: byte = f.read(ReadSize) 打印(字节)

示例输出 'h'

显示Pos整数我会写 打印(len(bin(1)[2:])) 或否定整数 len(bin(-1)[3:])

如何打印从文件中读取字节所需的位长度?

【问题讨论】:

一个字节在 Python 中总是 8 位。表示一个字节的位数总是 8。也许问题可能是“表示正整数的最小位数是多少”? (或者可能不会;无论如何,这个问题不是很清楚。) 如果上面的“问题可能”是正确的,***.com/q/12349498/2864740 包含有用的信息。如果数字可以是负数(因此可能假定为二进制补码),则答案略有变化。 【参考方案1】:

你可以试试这样的:

测试文件:

$ hexdump -C ~/test.bin 
00000000  b1 23 50 c2 06                                    |.#P..|
00000005

test.py:

import sys


def main():
    with open("test.bin", "rb") as f:
        while b := f.read(1):
            bits = int.from_bytes(b, sys.byteorder).bit_length()
            print(b.hex(), bits)


if __name__ == "__main__":
    main()

测试:

$ python test.py
b1 8
23 6
50 7
c2 8
06 3

【讨论】:

以上是关于我如何显示一个字节的位长,而不是整数的主要内容,如果未能解决你的问题,请参考以下文章

BitSet 与整数/长整数

使用逐位编码样式的位更新操作

c语言,为啥int类型在16位系统中占2个字节,在32位系统中占4个字节?

Java 迭代字节数组中的位

程序集 x86:如何计算 32 位长整数中的设置位数

UUID不是128位长的吗,怎么生成的都是36个字符的字符串?