2014-03-05 26 views
1

我目前正在編寫一個解析器來解釋GWT RPC的響應。GWT RPC如何在其有效負載中編碼java.lang.Long值?

然而,我有困難的時候,試圖找出GWT使用來編碼java.lang.Long中值的編碼(即,不是原始長 - 這將是的Base64)

下面是一個例子RPC有效載荷用於檢索一組對象由它的ID(通過.retrieve(java.lang.Long中ID)):

7|0|5|http://10.0.1.35:8005/platform/gwt/com.application.gwt.Contacts/|57C71F0104C208A16262D2898A6133DD|com.application.gwt.client.rpc.GroupService|retrieve|java.lang.Long/4227064769|1|2|3|4|1|5|5|PFu| 

我已成功地找出了值「PFU」(末尾)是在檢索方法中使用的組編碼ID。

實際組的ID是「61806」。

所以我的問題是,「61806」如何變成「PFu」?這裏使用什麼編碼?它並不顯得基地64

其他情況包括:

信息戰= 2198 D4O = 15886

+0

嗨,亞當,你完成了你的解碼器?你開源了嗎?你用哪個lang,javascript? – Matthias

回答

3

事實上,根據你的例子是完全有效的Base64。

但是,看起來最後兩位數字(價值62,63)分別使用'$'和'_',而不是更常見的'+'和'/'。

下劃線使URL安全並在某些實現中使用,但美元符號必須是他們自己的發明。

如果您通過轉換器運行您的示例,如果值正在進行ascii編碼(它們可能是),您可能會得到錯誤的結果。

+0

這非常有幫助。那麼,我將如何正確解碼這些值? –

+1

乘以64的冪我猜。所以D4O變成3 * 64^2 + 56 * 64^1 + 14 * 64^0 = 12288 + 3584 + 14 = 15886. –

+0

謝謝Marcus - 你解決了我的問題! –