2013-12-03 4 views
0

В Python 2.7, как я мог преобразовать десятичную точку с плавающей запятой (из десятичного модуля) в двоичное представление (серия байтов, которую я могу записать в двоичный файл и прочитать)? Меня интересует наименьшее возможное двоичное представление. Заранее спасибо!Преобразование Python Десятичное число в байты (двоичное представление)?

+0

Что делать, если нет идеального двоичного представления? –

+2

Это звучит как много работы. Вместо этого я рекомендую использовать «pickle». – Kevin

+0

Возможно, что-то в структурном модуле очевидно: (возможно, связанное: http://stackoverflow.com/questions/444591/convert-a-string-of-bytes-into-an-int-python) @JoranBeasley Wow they have теперь появилась память, в которой хранятся битовые последовательности, которые файлы не могут? –

ответ

0
my_float = Decimal("1.23") 

with open("some_file.bin","w") as f: 
     f.write("%s"%my_float.to_eng_string()) #string is a series of bytes 

print Decimal(open("some_file.bin").read()) #decoded bytes back to Decimal 

это, по существу, как внутреннее представление десятичного

Структура будет кортежем из трех элементов: знак, номер и экспонентов. Знак 1 или 0, число является кортежем десятичных цифр, а показатель - подписанный int или длинный

Десятичный ((1, (3, 2, 2, 5), -2)) # для - 32.25

+0

Вам не нужно читать из файла? Но я не думаю, что это то, что ищет OP. – mgilson

+1

Я согласен ... но я не уверен, что OP знает, что они ищут ... и это технически отвечает на вопрос defintion ... –

+0

слегка осветлены ... –

3

Возможно, что-то вроде этого? Лично я бы записывал данные в ASCII, хотя - писать в двоичных файлах обычно не стоит.

#!/usr/local/cpython-2.7/bin/python 

import pickle as pickle_mod 
import decimal as decimal_mod 

decimal = decimal_mod.Decimal(str(1.0/9.0)) 

pickled = pickle_mod.dumps(decimal) 
#print repr(pickled) 

with open('decimal.bin', 'wb') as file_: 
    file_.write(pickled) 

with open('decimal.bin', 'rb') as file_: 
    data = file_.read() 
decimal2 = pickle_mod.loads(data) 
print decimal2 
+0

и thats больше байтов, чем мое решение ... но да +1, поскольку это делает то, что ОП спрашивает (по крайней мере, как Я понимаю, чего они хотят) –

Смежные вопросы