В JavaScript Google Flatbuffers как написать ulong? - PullRequest
0 голосов
/ 05 сентября 2018

У меня нет проблем с этим в программе на C ++, но я застрял на написании ulong в JS.

FB не имеет проблем, если я использовал 32-битное значение process.hrtime ().

Но как работает createLong () для 64-битного?

см .: [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;

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Вы можете использовать эту функцию, она хорошо работает для отметки времени

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

0 голосов
/ 05 сентября 2018

Используйте flatbuffers.Long, вот пример: https://github.com/google/flatbuffers/blob/master/tests/JavaScriptTest.js#L160

К сожалению, в FlatBuffers нет кода для преобразования bigint в 2 32-битных значения, которые было бы неплохо добавить. На данный момент вам может потребоваться сделать свое собственное преобразование.

...