【问题标题】:extracting data from .net Data.ToBinary()从.net Data.ToBinary() 中提取数据
【发布时间】:2011-04-07 18:10:44
【问题描述】:

我需要读取使用 BinaryWriter 类编写的自定义序列化二进制数据。 为了存储日期,原设计师使用BinaryWriter.Write( Data.ToBinary() );

This 文章中提到了 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;

ps。这个概念会起作用吗?还是以总毫秒数的形式存储日期?

【问题讨论】:

  • 您是否尝试在没有框架的情况下以另一种语言从 .net 读取序列化数据?
  • 没错。语言包括java和objective-C。一旦我们知道了确切的架构,语言转换就变得微不足道了。

标签: .net datetime binarywriter


【解决方案1】:

你可以使用任何你想要的格式,只要你同时进行序列化和反序列化:) 但是既然一个常见的表示是'Ticks',为什么不去呢? 序列化就是保存和恢复,只要你能恢复你保存的任何东西,序列化就可以了:)

【讨论】:

  • 谢谢,但 DateTime 的 Ticks 属性是只读的。选择我们喜欢的格式为时已晚;我们需要在任何地方访问大量传统格式的数据。额外的远见会让我们构建自己的日期时间序列化格式。
  • DateTime构造函数可以将Ticks作为参数来实例化值...msdn.microsoft.com/en-us/library/aa326681(v=vs.71).aspx
【解决方案2】:

使用 Int64 构造函数,但您应该小心 DateTimeKind 参数。如果您序列化 DateTimeKind.Utc 并反序列化 DateTimeKind.UnspecifiedDateTimeKind.Local 值,您可能会遇到麻烦。

注意:可能最安全的做法是使用 ToUniversalTime() 序列化您的 DateTime 值,并始终使用 DateTimeKind.Utc 构造返回值>.

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多