You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
1.5 KiB
100 lines
1.5 KiB
'use strict'; |
|
|
|
// selected so (BASE - 1) * 0x100000000 + 0xffffffff is a safe integer |
|
var BASE = 1000000; |
|
|
|
function readInt8(buffer) { |
|
var high = buffer.readInt32BE(0); |
|
var low = buffer.readUInt32BE(4); |
|
var sign = ''; |
|
|
|
if (high < 0) { |
|
high = ~high + (low === 0); |
|
low = (~low + 1) >>> 0; |
|
sign = '-'; |
|
} |
|
|
|
var result = ''; |
|
var carry; |
|
var t; |
|
var digits; |
|
var pad; |
|
var l; |
|
var i; |
|
|
|
{ |
|
carry = high % BASE; |
|
high = high / BASE >>> 0; |
|
|
|
t = 0x100000000 * carry + low; |
|
low = t / BASE >>> 0; |
|
digits = '' + (t - BASE * low); |
|
|
|
if (low === 0 && high === 0) { |
|
return sign + digits + result; |
|
} |
|
|
|
pad = ''; |
|
l = 6 - digits.length; |
|
|
|
for (i = 0; i < l; i++) { |
|
pad += '0'; |
|
} |
|
|
|
result = pad + digits + result; |
|
} |
|
|
|
{ |
|
carry = high % BASE; |
|
high = high / BASE >>> 0; |
|
|
|
t = 0x100000000 * carry + low; |
|
low = t / BASE >>> 0; |
|
digits = '' + (t - BASE * low); |
|
|
|
if (low === 0 && high === 0) { |
|
return sign + digits + result; |
|
} |
|
|
|
pad = ''; |
|
l = 6 - digits.length; |
|
|
|
for (i = 0; i < l; i++) { |
|
pad += '0'; |
|
} |
|
|
|
result = pad + digits + result; |
|
} |
|
|
|
{ |
|
carry = high % BASE; |
|
high = high / BASE >>> 0; |
|
|
|
t = 0x100000000 * carry + low; |
|
low = t / BASE >>> 0; |
|
digits = '' + (t - BASE * low); |
|
|
|
if (low === 0 && high === 0) { |
|
return sign + digits + result; |
|
} |
|
|
|
pad = ''; |
|
l = 6 - digits.length; |
|
|
|
for (i = 0; i < l; i++) { |
|
pad += '0'; |
|
} |
|
|
|
result = pad + digits + result; |
|
} |
|
|
|
{ |
|
carry = high % BASE; |
|
t = 0x100000000 * carry + low; |
|
digits = '' + t % BASE; |
|
|
|
return sign + digits + result; |
|
} |
|
} |
|
|
|
module.exports = readInt8;
|
|
|