协议缓冲区:我应该使用int64或fixed64来表示.NET DateTime值吗?

Mik*_*scu 7 .net serialization protocol-buffers

我需要在协议缓冲区消息中序列化.NET DateTime值.

我的计划是使用DateTime.ToBinary(),然后传递消息中的64位返回值.但我不确定选择什么作为协议缓冲数据类型来表示.

我想我应该使用fixed64(或sfixed64)数据类型时感到困惑.

我假设在这种情况下我会使用签名类型,因为DateTime.ToBinary()返回的值可以是负数也可以是正数.

Jon*_*eet 9

好吧,你肯定想要int64或者sfixed64要对付正在签署的价值.

刚刚进行了快速测试,DateTime.Now.ToBinary()使用10个字节进行编码,int64sfixed64总是使用8个字节.基本上,可变长度编码对于小数字很有用,但是对于大数字而言变得比固定编码大.(这与使用UTF-8而不是UTF-16的权衡相同 - ASCII字符可以在单个字节中以UTF-8编码,但稍后在代码点上最终被编码为2个然后是3个字节,而UTF -16总是在BMP中使用2个字节的字符.)

我的猜测是DateTime.ToBinary()价值可能非常大(不知道它究竟是什么的细节),所以sfixed64更合适.

那有意义吗?