2011-02-24 46 views
4

我一直在使用Protocol Buffers與使用CocoaTouch編寫的iOS應用程序一起工作,並且遇到了可能等於十進制數字的新手錯誤。可可小數和協議緩衝區,與.NET的兼容性

協議緩衝區沒有原生十進制類型 - 請參閱http://code.google.com/apis/protocolbuffers/docs/proto.html#scalar所有類型。相反,我做了(現在明顯不正確)的假設,即浮點數可以代替小數。它沒有,因爲有舍入問題。

Cocoa在NSDecimal.h中有一組C函數,它們看起來很有吸引力。然而,由於我正在與一個使用.NET編寫代碼的服務器進行通信,因此我需要一種轉換爲兩種系統都可以理解的格式的轉換方法。

我假設我會使用原始的「字節」類型在兩個系統之間傳輸數據,並在每個環境中將其轉換爲原生十進制類型:Cocoa端的NSDecimal,.NET端的Decimal。在這裏,我不清楚如何繼續。

我應該使用什麼中間格式 - 二進制編碼的小數似乎是一種可能性,但我必須自己實現一個算法才能在兩個系統上進行轉換。

是否有一個字節編碼的十進制格式,.NET和Cocoa都說我可以使用?

非常感謝。

+0

+1有趣的問題 – 2011-02-24 11:35:27

回答

1

隨機一起攻擊了一個相當任意的protobuf-net格式,映射到.NET decimal類型 - 佈局is here。這適用於.NET到.NET,但我不太瞭解可可小數,以瞭解它如何適用。

+0

我會使用長度爲前綴的wiretype,並將指數和符號寫入第一個字節,然後將尾數作爲小尾數整數,在序列末尾省略0字節。這將導致總長度在2個字節(編碼0)和14個字節之間變化。 – CodesInChaos 2011-02-24 13:50:27