2013-05-29 82 views
2

我試圖使用json.push_back調用libjson是否支持64位int類型?

uint64_t myHigh = 0x10;   
    uint64_t myLow = 0x12; 
    uint64_t myFinal = 0; 


    myFinal = (myHigh << 32) | myLow ; 

    std::cout << "val = 0x" << std::hex << myFinal << "\n";-----(1) 
    JSONNode jvData; 

    jvData.push_back(JSONNode("value",myFinal)); 
    std::cout<<jvData.write();--------------------------(2) 

的COUT(1)給出的值0xa0000000c 的COUT(2)示出的值,以64位整數數據推送到JSONNode 12.

我期望cout(2)的值爲42949672972,但似乎沒有按預期工作

Json是否支持64位int?

回答

2

由於JavaScript內部將值編碼爲64位浮點值(http://ecma262-5.com/ELS5_HTML.htm#Section_8.5),64位整數不能用JSON表示。

因此,你被限制在53位精度(2^53)。

如果要交換64位整數,可以使用字符串或以兩個32位整數分割64整數,然後重新組合它們(What is the accepted way to send 64-bit values over JSON?)。

+0

謝謝Matthiue .....我想我會去與字符串的東西。 – payyans4u

+0

但是Python的'json'將它們序列化並反序列化爲64位整數。雖然從技術上講它不是正確/有效/規範的JSON,但只要您使用的所有JSON實現都支持它們,我認爲沒有問題可以使用長整數。 –