如何从Python中字符串的前8个字节计算双精度浮点数?

Jua*_*oto 6 python sorting unicode floating-point double

尝试从Python中的UTF-8编码字符串对象获取双精度浮点分数.想法是抓住字符串的前8个字节并创建一个float,这样按照得分排序的字符串将根据它们的前8个字节(或者可能是它们的前63位,在强制它们全部被强制执行后)按字典顺序排序.积极的,以避免签署错误).

例如:

get_score(u'aaaaaaa') < get_score(u'aaaaaaab') < get_score(u'zzzzzzzz')
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用bit-shift-left和XOR计算整数得分,但我不确定如何将其转换为float值.我也不确定是否有更好的方法来做到这一点.

如何计算字符串的分数,以满足我之前指定的条件?

编辑:字符串对象是UTF-8编码的(根据@ Bakuriu的提交).

Ign*_*ams 3

float不会给你 64 位精度。请改用整数。

def get_score(s):
  return struct.unpack('>Q', (u'\0\0\0\0\0\0\0\0' + s[:8])[-8:])[0]
Run Code Online (Sandbox Code Playgroud)

在Python 3中:

def get_score(s):
  return struct.unpack('>Q', ('\0\0\0\0\0\0\0\0' + s[:8])[-8:].encode('ascii', 'error'))[0]
Run Code Online (Sandbox Code Playgroud)

编辑:

对于floats,有 6 个字符:

def get_score(s):
  return struct.unpack('>d', (u'\0\1' + (u'\0\0\0\0\0\0\0\0' + s[:6])[-6:]).encode('ascii', 'error'))[0]
Run Code Online (Sandbox Code Playgroud)