protobuf fromNumber encoding error
acode-x opened this issue · comments
Hi,
I am trying to assign a protobuf field which stores an int64 value.
I notice fromString works perfectly fine, but fromNumber doesn't
message AwesomeMsg1 {\
int64 my_int64 = 1;\
}\
';
protobuf.parse(protofile, root, {keepCase : true, alternateCommentMode : true});
root.resolveAll();
var AwesomeMsg1 = root.lookup(".AwesomeMsg1");
var max_int64 = 9223372036854775000;
console.log(typeof max_int64); // number
console.log(max_int64); // 9223372036854775000
var obj1 = AwesomeMsg1.create({});
obj1.my_int64 = Long.fromNumber(max_int64, false);
encoded_buffer = AwesomeMsg1.encode(obj1).finish();
console.log(encoded_buffer.toString('hex')); // 3080f8ffffffffffff7f
var obj2 = AwesomeMsg1.create({});
obj2.my_int64 = Long.fromString(max_int64.toString(), false);
encoded_buffer = AwesomeMsg1.encode(obj2).finish();
console.log(encoded_buffer.toString('hex')); // 30d8f9ffffffffffff7f
As you see from above, hex of both values above are different.
Maybe I am missing out something obvious.
Requesting help on same.
Thanks
Values larger than Number.MAX_SAFE_INTEGER = 9007199254740991
cannot be safely represented in JS as a normal number
, which is why long.js exists (see). It is expected that constructing a Long
from a number
with a larger value is inaccurate, because the number
used is already inaccurate.
Understood.
Thanks for the explanation!