python - 将十进制数转换为字节大小的 8 位数组
问题描述
x = 64
var_in_bin_format = bin(64)
print(var_in_bin_format)
#Output
#0b1000000
#Desired Output -- > should always be in 8 bit format
#0b01000000
def call_another_api(var_in_bin_format):
pass
在 Python 中,我需要调用一个 API,该 API 期望其参数始终为 8 位格式,而不管十进制数的值如何?
我在位操作方面不是那么好,所以我在想是否有什么我可以在这里做的?
我怎样才能做到这一点?我不能使用 format() 函数,因为它会将值转换为字符串表示形式,并且我正在调用的 API 会提醒我它的格式不正确。
解决方案
即使你说你不能使用format()
,因为它返回一个字符串,我还是要发布这个,因为这也是这样bin()
做的。bin(x)
相当于format(x, '#b')
。我猜你没有添加'#'
,这意味着你不会有'0b'
领先的价值。
Python 3 文档实际上给出了一个非常强烈的bin()
提示,说明你可以如何做到这一点,format
而不是使用。
如果您知道传递的值不会是负数,则可以使用格式字符串'#010b'
:
format(x, '#010b')
打破这个:
'b'
表示该数字将是一个字符串二进制表示。'10'
表示整个字符串将有 10 个字符长,两个用于 '0b', 8 个用于值。'0'
使它用'0'
而不是填充' '
。'#'
将添加'0b'
前缀,如bin()
.
请注意,这假定数字是 [0, 255] 范围内的整数。此范围之外的整数将生成有效的表示,但与预期的格式不匹配,并且可能具有前导'-'
. 类型的对象float
不能用'b'
格式代码转换。考虑到您的预期输出,我认为这些都不是问题,但是ValueError
如果值小于 0 或大于 255,则添加显式检查以抛出 a 可能是个好主意。
如果您使用的是 Python 3.6+,您还可以使用 f-strings:
f'{x:#010b}'
推荐阅读
- c# - 性能计数器良好做法
- c# - 在同一行的自动映射器中初始化 Ilist
- google-apps-script - Google-sheets 脚本查找数据并使用高级 Google 服务显示在弹出消息中
- java - 通过 Java Web Start 9 和 10 的 JApplet 似乎将宽度设置为高度
- asp.net-mvc - 如何在 Visual Studio 2017 中创建 MVC 项目?
- javascript - 发现“不可信”事件的起源
- ssl - SSL 等效于 givedescriptor() 和 takedescriptor()
- python - 评估原始或转换后因变量的预测性能指标
- java - 以 CSV 格式下载数据库表数据
- angular - Ionic3 找不到管道“翻译”