billy_bob
Ноя. 23, 2010 16:17:38
Здравствуйте.
Извините, перечитал форум на данную тему, но что то до меня так и не доходит.
есть большая-пребольшая строка, содержащая значения типа double (сишные) подряд без разделителей в двоичном виде
(Пример: \x92|\x10\x88\x11\x17\x12&\x10\x11\x10\xe7\r\x88\x0f\xaa\x0e4\x10)
соответственно нужно преобразовать эту строку в список float-ов. Как я понял для этого нужно использовать модуль struct примерно в таком виде fft = struct.unpack('d', строка). Правильно ли я все понял?
И тогда соответственно вопрос - как организовать цикл чтения данных из строки по 8 символов?
Извините за примитивные вопросы, спасибо за понимание.
Андрей Светлов
Ноя. 23, 2010 16:23:07
Во первых, существует операция s - вернет вторую восьмерку байт.
Во вторых, есть cStringIO.StringIO
В третьих, именно здесь уместнее будет использовать array.array.
billy_bob
Ноя. 23, 2010 16:30:04
Андрей Светлов
Во первых, существует операция s - вернет вторую восьмерку байт.
мм.. я почему и задал вопрос по поводу строк, потому что просто выдернуть конкретные 8 байт из строки я могу, а вот в цикле выдергивать по 8 байт что то не доходит как. может перед монитором пересидел, утомился, но блин..
billy_bob
Ноя. 23, 2010 16:57:06
мм.. с чтением строки разобрался, спасибо за подсказку в сторону cStringIO
получилось следующее
file = cStringIO.StringIO(fft[0])
a = set()
while 1:
buff = file.read(8)
if not buff:
break
ff = struct.unpack('d', buff)
a.add(ff)
А что не так в данном случае с struct? и почему лучше array?
billy_bob
Ноя. 23, 2010 17:03:25
да, некоторые значения отображаются как ‘nan’. Это 0 или результат неверного преобразования в float?