извлечение данных из .net Data.ToBinary () - PullRequest
3 голосов
/ 07 апреля 2011

Мне нужно прочитать сериализованные пользователем двоичные данные, написанные с использованием класса BinaryWriter. Для хранения даты использовались оригинальные дизайнеры BinaryWriter.Write( Data.ToBinary() );

В этой статье упоминается, как работает функция ToBinary; но мне нужно создать код, который будет эмулировать методы ToBinary () и FromBinary () в других языках программирования.

Может кто-нибудь взглянуть на следующий псевдокод и дать мне представление о действительном счетчиках смещения битов.

long i = DateTime.Now.ToBinary();
// will likely need to add code here to "condition" the value
int yr = (i >> 48) & 0x7fff;
int mo = (i >> 44) & 0xf;
int day = (i >> 36) & 0xff;
int hr = (i >> 28) & 0xff;
int min = (i >> 20) & 0xff;
int sec = (i >> 12) & 0xff;
int ms = i & 0xfff;

пс. сработает ли эта концепция? Или дата хранится в виде общих миллисекунд?

Ответы [ 2 ]

1 голос
/ 07 апреля 2011

Вы можете использовать любой формат, который захотите, если вы одновременно выполняете сериализацию и десериализацию :) Но поскольку общее представление - это «Ticks», почему бы не пойти с этим? Сериализация все о сохранении и восстановлении, пока вы можете восстановить все, что вы сохраняете, сериализация работала:)

0 голосов
/ 02 марта 2014

Используйте конструктор Int64 , но вы должны быть осторожны с аргументом DateTimeKind . Вы можете столкнуться с неприятностями, если сериализовать DateTimeKind.Utc и десериализовать значение DateTimeKind.Unspecified или DateTimeKind.Local .

Примечание: Вероятно, наиболее безопасным способом является сериализация значений DateTime с использованием ToUniversalTime () и всегда создание возвращаемого значения с использованием DateTimeKind.Utc .

...