[英]How to parse UDP datagram to a Dart Class
I am developing a Dart application.我正在开发一个 Dart 应用程序。 This app receives UDP packages from a socket.此应用程序从套接字接收 UDP 包。 Here is an example of a datagram struct(sent from a C application):这是数据报结构的示例(从 C 应用程序发送):
struct DataLoggerMessage
{
uint16_t loggerFlag;
uint16_t eventOnOff;
uint16_t generatedEventNumber;
uint16_t systemPausedFlag;
mainInput input;
mainOutput output;
};
struct mainInput{
float p1;
int p2;
double p3;
....
}
struct mainOutput{
float p1;
int p2;
double p3;
....
}
I want to parse these comming struct to a Dart class like below:我想将这些通信结构解析为 Dart class ,如下所示:
class DataLoggerMessage {
int? loggerFlag;
int? eventOnOff;
int? generatedEventNumber;
int? systemPausedFlag;
MainInput? mainInput;
MainOutput? mainOutput;
}
My main problem is to determine right bytes.我的主要问题是确定正确的字节。 For example;例如; first 2 bytes of the datagram is 'loggerFlag', but in the dart class 'loggerFlag' is 4 byte integer.数据报的前 2 个字节是“loggerFlag”,但在 dart class 中,“loggerFlag”是 4 个字节 integer。 Of course I can store 2 byte in an int.当然,我可以在一个 int 中存储 2 个字节。 But I need a proper parser for whole struct.但是我需要一个适合整个结构的解析器。 For example in C we can simply do this:例如在 C 我们可以简单地这样做:
memcpy(ioStruct, value, sizeof(DataLoggerMessage));
Is there a method in dart like above? dart 中是否有类似上面的方法? Thanks.谢谢。
Assuming you get a ByteBuffer
, you can simply have:假设你得到一个ByteBuffer
,你可以简单地拥有:
var short_int_list = byte_buffer.asInt!6List(0, 4)
data_logger_message.loggerFlag = short_int_list[0]
data_logger_message.eventOnOff = short_int_list[1]
...
similarly for a ByteData
object, then you have things like同样对于ByteData
object,那么你有类似的东西
var byte_length = 2
data_logger_message.loggerFlag = byte_data.getInt16(0*byte_length)
data_logger_message.eventOnOff = byte_data.getInt16(1*byte_length)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.