64 位整数表示 - V2EX
ghostheaven

64 位整数表示

  •  
  •   ghostheaven Aug 4, 2017 4127 views
    This topic created in 3209 days ago, the information mentioned may be changed or developed.
    需要从 Buffer 里读出来一个 64 位的整数,发现 JS 最大精确的整数< 64 位,所以不提供 readUint64BE 的方法。如果用 bignum 处理就太麻烦,所有相关的四则运算都得改写成函数调用。

    幸好 Buffer 里的数字也没有超过 JS 最大的整数值,所以就用 JS 的整数简单代替了一下,一旦发现 Buffer 这个值的高位超过了最大整数的高位就直接报错了事。

    大家都是怎么处理这种问题的
    9 replies    2017-08-05 16:11:09 +08:00
    chai2010
        1
    chai2010  
       Aug 4, 2017
    js 里面是 float64,可以精确涵盖 int53 范围的整数,如果够用就用 js 内置的浮点数就行了
    ETiV
        2
    ETiV  
       Aug 4, 2017 via iPhone
    有个 long.js
    可以把 buffer 转成 long 对象,分 high、low,还可以.toString
    ghostheaven
        3
    ghostheaven  
    OP
       Aug 4, 2017 via Android
    @chai2010 是 64 位的偏移量,指向文件内的一个位置,浮点肯定不行。
    ghostheaven
        4
    ghostheaven  
    OP
       Aug 4, 2017 via Android
    @ETiV 这个跟 bignum 的问题一样,要用它的方法代替运算符,不过这可能是 js 上的唯一方式。
    不知道 typescript 有没有 64 位的强类型,或者要考虑 webassembly 了。
    chai2010
        5
    chai2010  
       Aug 4, 2017
    @ghostheaven 30bit 是 1GB, 40bit 是 1TB, 50bit 是 1PB, 指向文件内的一个位置很小的,
    int53 足够表示, 这是 double 型能精确表示的整数区域.
    8qwe24657913
        6
    8qwe24657913  
       Aug 4, 2017
    现在就得改成函数调用;将来的话,有个 stage-3 的提案 https://github.com/tc39/proposal-bigint
    ghostheaven
        7
    ghostheaven  
    OP
       Aug 5, 2017 via Android
    @chai2010 确实,忘记算一下了,暂时用 js 的整数不会出问题。
    ghostheaven
        8
    ghostheaven  
    OP
       Aug 5, 2017 via Android
    @8qwe24657913 这个不知道啥时候能成正式的标准,而且说混合普通数值运算会丢精度,这就有点坑了。
    53 位的整数看上去还不错,一般见不到那么大的文件。
    8qwe24657913
        9
    8qwe24657913  
       Aug 5, 2017
    @ghostheaven #8 仔细看,他说的是因为混合运算会丢精度,所以不允许混合运算,要你手动调用 Number()或 BigInt()来转换类型再运算
    About     Help     Advertise     Blog     API     FAQ     Solana     2993 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 12:49 PVG 20:49 LAX 05:49 JFK 08:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86