将两个32位整数转换为一个带符号的64位整数字符串

Max*_*Max 5 javascript postgresql node.js

我有一个64位无符号整数,我需要在PostgreSQL中表示.我把它分解为两个32位无符号整数,high并且low.为了让Postgres的接受它,我需要转换high,并low以代表符号的64位整数的字符串.

如何将两个32位无符号整数转换为以十进制表示的有符号64位整数的字符串?

far*_*ter 1

我已经在 J​​avascript 中以快速'n'肮脏但工作'n'快速的方式完成了这一点:Int64HighLowToFromString,使用 53 位尾数双精度算术和 32 位位运算,专门用于十进制输入/输出。

function Int64HiLoToString(hi,lo){
  hi>>>=0;lo>>>=0;
  var sign="";
  if(hi&0x80000000){
    sign="-";
    lo=(0x100000000-lo)>>>0;
    hi=0xffffffff-hi+ +(lo===0);
  }
  var dhi=~~(hi/0x5af4),dhirem=hi%0x5af4;
  var dlo=dhirem*0x100000000+dhi*0xef85c000+lo;
  dhi += ~~(dlo/0x5af3107a4000);
  dlo%=0x5af3107a4000;
  var slo=""+dlo;
  if(dhi){
    slo="000000000000000000".slice(0,14-slo.length)+dlo;
    return sign+dhi+slo;
  }else{
    return sign+slo;
  }
}
Run Code Online (Sandbox Code Playgroud)

这很可能就是您所需要的。