我正在將一堆舊的製表符分隔的MySQL數據庫轉儲文件轉換爲協議緩衝區,並且遇到了麻煩。 MySQL表包含int(11) unsigned
類型的字段,我已將其映射到.proto
文件中的protobuf uint32
。當解析MySQL記錄並嘗試將它們轉換爲protobuf消息時,很容易使用Integer.valueOf(String)
(或Long.valueOf(String)
來避免溢出)解析該字段。然而,Protocol Buffers Language Guide指示here在Java中,uint32
s使用int
數據類型來表示,但是第一位被重新解釋爲最高位而不是符號位。如何將Java無符號整數轉換爲Java中的協議緩衝區uint32s?
因此,在我去寫我自己的String
→uint32
-flavored- int
解析器,我認爲值得問問是否有人已經解決了這個問題。什麼是將MySQL int unsigned
的String
表示形式轉換爲Java中的協議緩衝區uint32
的正確方法?
我得出了類似的結論,但是你比我更乾淨地實施它。這提出了一個類似的問題:如何通過Java解析'unsigned bigint'到protobuf'uint64'? – 2013-02-21 18:37:32
您的解決方案還表明,可以簡單地通過從'int'轉換回'long'來完成未轉換,這很好。 – 2013-02-21 18:38:02
@JoshHansen,我對你的評論做出了迴應。 – MvG 2013-02-21 22:08:15