json11 int64_t
前は picoJsonを愛用していて、今でも十分に 小さく使いやすい
ヘッダのみで利用できるので、場合によっては今でも使う
けど、json11が評判いいし使っています
実際に使いやすい
ところが json11は uint32、int64、uint64 等がない。
全部において int_value である
プロトタイプをみると intである
C++においては、整数型とビット数が、規格ではちゃんと決まっていない。
処理系やコンパイラでビット数が異なる
一般的な64bitマシンではおおよそ
int: 32bit
long: 32bit
long long: 64bit
である
つまりおおよその処理系では json11の int_value() では 符号あり32bit数しかとれない
そこで double_value() を使って取ると、ちゃんと調査してないけど
53bitまでは取れるはずなので
uint32は取れる
が、int64、uint64に関しては 53ビットしか取れないため、残りの11bit情報が取れない
とりあえず jsonデータを stringにし、内部でint64に変換するのが 楽な気がする
一般的に Javaでも jsonライブラリはライブラリ毎に その辺りも微妙に事情が違うので
今のところは stringで受け渡しすることにした
そのうち json11も uint32 int64 uint64対応入れたいけどね。。。
そして 文字列から int64_tに変換するには おそらく std::atoll で良いと思う
ただし long long == int64 の処理系限定である
もし long long != int64 処理系だと・・・
この際のベストプラクティスは何なのか・・・
悩みは色々あるけど、64bit環境では おそらくこれで大丈夫かと
ちなみに uint64_tが欲しい時は std::uatoll が使える