Python: двоичная кодировка даты и времени С#C#

Место общения программистов C#
Ответить
Anonymous
 Python: двоичная кодировка даты и времени С#

Сообщение Anonymous »

Мне нужно извлечь данные о финансовых ценах из двоичного файла. Эти данные о ценах обычно извлекаются с помощью фрагмента кода C#. Самая большая проблема, с которой я столкнулся, — получить осмысленное значение даты и времени.

Двоичные данные выглядят так:

Код: Выделить всё

'\x14\x11\x00\x00{\x14\xaeG\xe1z(@\x9a\x99\x99\x99\x99\x99(@q=\n\xd7\xa3p(@\x9a\x99\x99\x99\x99\x99(@\xac\x00\x19\x00\x00\x00\x00\x00\x08\x01\x00\x00\x00"\xd8\x18\xe0\xdc\xcc\x08'
Код C#, который правильно извлекает его:

Код: Выделить всё

StockID = reader.ReadInt32();
Open = reader.ReadDouble();
High = reader.ReadDouble();
Low = reader.ReadDouble();
Close = reader.ReadDouble();
Volume = reader.ReadInt64();
TotalTrades = reader.ReadInt32();
Timestamp = reader.ReadDateTime();
Вот тут я и познакомился с Python. У меня есть пара опасений по этому поводу.

Код: Выделить всё

In [1]: barlength = 56; barformat = 'i4dqiq'
In [2]: pricebar = f.read(barlength)
In [3]: pricebar
Out[3]: '\x95L\x00\x00)\\\x8f\xc2\xf5\xc8N@D\x1c\xeb\xe26\xcaN@\x7fj\xbct\x93\xb0N@\xd7\xa3p=\n\xb7N@\xf6\xdb\x02\x00\x00\x00\x00\x00J\x03\x00\x00\x00"\xd8\x18\xe0\xdc\xcc\x08'
In [4]: struct.unpack(barformat, pricebar)
Out[4]:
(19605,                # stock id
61.57,                # open
61.579800000000006,   # high
61.3795,              # low
61.43,                # close
187382,               # volume -- seems reasonable
842,                  # TotalTrades -- seems reasonable
634124502600000000L   # datetime -- no idea what this means!
)
Я использовал встроенный модуль структуры Python, но у меня есть некоторые опасения по этому поводу.
  • Я не уверен, какие символы формата соответствуют Int32 и Int64 в коде C#, хотя несколько разных попыток вернули один и тот же кортеж Python.
  • Однако меня это беспокоит, поскольку вывод для некоторых полей не очень чувствителен к указанному мной формату: например, поле TotalTrades возвращает ту же сумму, если я укажу его как подписанное или беззнаковое int ИЛИ подписанное или unsigned long (l, L, i или I)
  • Я не могу понять значение поля возврата даты. На самом деле это моя самая большая проблема.


Подробнее здесь: https://stackoverflow.com/questions/316 ... e-encoding
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»