python float字节数_Python中float的二进制表示(位不是十六进制)

您可以使用struct软件包来做到这一点:

import struct

def binary(num):

return ''.join(bin(ord(c)).replace('0b', '').rjust(8, '0') for c in struct.pack('!f', num))

它将其打包为网络字节排序的浮点数,然后将每个结果字节转换为8位二进制表示形式并将其串联起来:

>>> binary(1)

'00111111100000000000000000000000'

编辑:有人要求扩大解释。 我将使用中间变量对此进行扩展以注释每个步骤。

def binary(num):

# Struct can provide us with the float packed into bytes. The '!' ensures that

# it's in network byte order (big-endian) and the 'f' says that it should be

# packed as a float. Alternatively, for double-precision, you could use 'd'.

packed = struct.pack('!f', num)

print 'Packed: %s' % repr(packed)

# For each character in the returned string, we'll turn it into its corresponding

# integer code point

#

# [62, 163, 215, 10] = [ord(c) for c in '>\xa3\xd7\n']

integers = [ord(c) for c in packed]

print 'Integers: %s' % integers

# For each integer, we'll convert it to its binary representation.

binaries = [bin(i) for i in integers]

print 'Binaries: %s' % binaries

# Now strip off the '0b' from each of these

stripped_binaries = [s.replace('0b', '') for s in binaries]

print 'Stripped: %s' % stripped_binaries

# Pad each byte's binary representation's with 0's to make sure it has all 8 bits:

#

# ['00111110', '10100011', '11010111', '00001010']

padded = [s.rjust(8, '0') for s in stripped_binaries]

print 'Padded: %s' % padded

# At this point, we have each of the bytes for the network byte ordered float

# in an array as binary strings. Now we just concatenate them to get the total

# representation of the float:

return ''.join(padded)

以及一些示例的结果:

>>> binary(1)

Packed: '?\x80\x00\x00'

Integers: [63, 128, 0, 0]

Binaries: ['0b111111', '0b10000000', '0b0', '0b0']

Stripped: ['111111', '10000000', '0', '0']

Padded: ['00111111', '10000000', '00000000', '00000000']

'00111111100000000000000000000000'

>>> binary(0.32)

Packed: '>\xa3\xd7\n'

Integers: [62, 163, 215, 10]

Binaries: ['0b111110', '0b10100011', '0b11010111', '0b1010']

Stripped: ['111110', '10100011', '11010111', '1010']

Padded: ['00111110', '10100011', '11010111', '00001010']

'00111110101000111101011100001010'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值