6

Python で UTF-8 でエンコードされた文字列オブジェクトから倍精度浮動小数点スコアを取得しようとしています。アイデアは、文字列の最初の 8 バイトを取得して を作成することfloatです。これにより、スコア順に並べられた文字列は、最初の 8 バイト (または、すべてを強制的に正符号エラーを避けるため)。

例えば:

get_score(u'aaaaaaa') < get_score(u'aaaaaaab') < get_score(u'zzzzzzzz')

bit-shift-left と XOR を使用して整数でスコアを計算しようとしましたが、それを値に変換する方法がわかりませんfloat。これを行うためのより良い方法があるかどうかもわかりません。

前に指定した条件が満たされるように、文字列のスコアをどのように計算する必要がありますか?

編集:文字列オブジェクトはUTF-8でエンコードされています(@Bakuriuのコメントによる)。

4

2 に答える 2

3

float64ビットの精度は得られません。代わりに整数を使用してください。

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

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]

編集:

float6 文字の s の場合:

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]
于 2013-10-23T18:55:52.663 に答える