在JavaScript Google Flatbuffers中,如何写一个ulong?
In JavaScript Google Flatbuffers, how does one write a ulong?
我在 C++ 程序中这样做没有问题,但我坚持在 JS 中编写一个 ulong。
如果我使用 32 位 process.hrtime() 值,FB 没有问题。
但是如何为 64 位执行 createLong()?
参见:[https://nodejs.org/api/process.html#process_process_hrtime_bigint]
# commented line does not work
# let timeStamp = process.hrtime.bigint()
let timeStamp = process.hrtime()
let ts = builder.createLong(0, timeStamp)
PNT.Telemetry.startTelemetry(builder)
PNT.Telemetry.addSystemTime(builder, ts)
FB模板文件
// Simple Telemetry data from/to Sim and Sensor
namespace PNT;
enum DeviceType:byte { IMU, VAN, GPS, MAGNAV, SOOP }
struct PosVector {
lat:double;
lon:double;
alt:double;
}
table Telemetry {
source: string;
systemTime:ulong = 0;
systemTimeString: string;
description: string;
position: PosVector;
}
root_type Telemetry;
使用flatbuffers.Long
,这里有一个例子:https://github.com/google/flatbuffers/blob/master/tests/JavaScriptTest.js#L160
遗憾的是,FlatBuffers 中没有将 bigint 转换为 2 个 32 位值的代码,添加这些代码会很好。现在您可能需要自己进行转换。
你可以使用这个函数,它对时间戳很有效
var flatBufferTimeStamp = function(value) {
var bin = (value).toString(2);
var pad = new Array(64 - bin.length + 1 ).join('0');
bin = pad + bin;
return {
low: parseInt(bin.substring(32), 2),
high: parseInt(bin.substring(0, 32), 2)
};
}
var timeStamp = flatBufferTimeStamp(process.hrtime())
let ts = builder.createLong(timeStamp.low, timeStamp.high);
PNT.Telemetry.startTelemetry(builder)
PNT.Telemetry.addSystemTime(builder, ts)
来源:https://groups.google.com/forum/#!topic/flatbuffers/ieXNEsB_2wc
我在 C++ 程序中这样做没有问题,但我坚持在 JS 中编写一个 ulong。
如果我使用 32 位 process.hrtime() 值,FB 没有问题。
但是如何为 64 位执行 createLong()?
参见:[https://nodejs.org/api/process.html#process_process_hrtime_bigint]
# commented line does not work
# let timeStamp = process.hrtime.bigint()
let timeStamp = process.hrtime()
let ts = builder.createLong(0, timeStamp)
PNT.Telemetry.startTelemetry(builder)
PNT.Telemetry.addSystemTime(builder, ts)
FB模板文件
// Simple Telemetry data from/to Sim and Sensor
namespace PNT;
enum DeviceType:byte { IMU, VAN, GPS, MAGNAV, SOOP }
struct PosVector {
lat:double;
lon:double;
alt:double;
}
table Telemetry {
source: string;
systemTime:ulong = 0;
systemTimeString: string;
description: string;
position: PosVector;
}
root_type Telemetry;
使用flatbuffers.Long
,这里有一个例子:https://github.com/google/flatbuffers/blob/master/tests/JavaScriptTest.js#L160
遗憾的是,FlatBuffers 中没有将 bigint 转换为 2 个 32 位值的代码,添加这些代码会很好。现在您可能需要自己进行转换。
你可以使用这个函数,它对时间戳很有效
var flatBufferTimeStamp = function(value) {
var bin = (value).toString(2);
var pad = new Array(64 - bin.length + 1 ).join('0');
bin = pad + bin;
return {
low: parseInt(bin.substring(32), 2),
high: parseInt(bin.substring(0, 32), 2)
};
}
var timeStamp = flatBufferTimeStamp(process.hrtime())
let ts = builder.createLong(timeStamp.low, timeStamp.high);
PNT.Telemetry.startTelemetry(builder)
PNT.Telemetry.addSystemTime(builder, ts)
来源:https://groups.google.com/forum/#!topic/flatbuffers/ieXNEsB_2wc