Cocoa小数和协议缓冲区,与.NET兼容性问题

5
我一直在使用CocoaTouch编写的iOS应用程序中使用Protocol Buffers,并遇到了一个关于小数的新手错误。Protocol Buffers没有本地小数类型-请参见http://code.google.com/apis/protocolbuffers/docs/proto.html#scalar以获取所有类型。相反,我做出了(现在显然是错误的)假设,即浮点数可以代替小数。但由于存在舍入问题,它并不能。
Cocoa有一组在NSDecimal.h中的C函数看起来很有吸引力。但是,由于我正在与使用.NET编写的服务器通信,因此我需要一种方法将其转换为两个系统都可以理解的格式。
我假设我会使用原始的“字节”类型在两个系统之间传输数据,并在每个环境中将其转换为本机小数类型:Cocoa端上的NSDecimal,在.NET端上的Decimal。就在这里,我不清楚如何继续。
我应该使用什么中间格式-二进制编码的十进制似乎是一种可能性,但我必须自己实现算法来在两个系统上进行转换。
有一种字节编码的十进制格式,.NET和Cocoa都可以使用,我能用它吗?
非常感谢。
1个回答

1

我随机地为protobuf-net拼凑了一个相当任意的格式,用于映射到.NET decimal类型 - 布局在这里。 这对于.NET-to-.NET非常有效,但是我不了解Cocoa小数是如何适应的。


我会使用长度前缀的wiretype,并将指数和符号写入第一个字节,然后将尾数作为小端整数写入,省略序列末尾的0字节。这将导致总长度在2个字节(encoding 0)和14个字节之间变化。 - CodesInChaos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接