在C++/Visual Studio中,通过给定数据格式(doubles、float、int、1位bools)的UDP发
Best way to proceed to send data over UDP having the data format given (doubles, floats, ints, 1 bit bools) in C++/Visual Studio? Serialization?
我有数据,其中包括纬度和经度的32位缩放整数,x y和z速度的32位浮点,以及一些1位标志。我也成功地通过UDP发送了至少一个double,但它在另一端和Wireshark中似乎是垃圾。我需要逐位访问,以便在UDP上发送数据的每一秒切换/更改数据。消息格式很简单,每种数据类型都会占用其大小,并有一个特定的起始位。我似乎需要序列化,但对于另一端,不一定要反序列化,这可能吗?我的第一个想法是用所有数据创建一个结构,然后通过UDP发送整个结构,但填充似乎是错误的。消息需要为64字节长,并且每个数据类型都有一个起始位和格式长度。这段代码可以编译和工作,但在接收端有一个不可读的纬度。Lat、long和alt每秒钟更新一次。有更多的数据字段,但我正在尝试从小处着手。格式的一个片段附有数据类型、单词位置、单词中的起始位,并附有以位为单位的长度,lat、long和alt位于消息中的其他位置。数据格式现在最好的想法是使用谷物(http://uscilab.github.io/cereal/index.html)但不确定这是否是一条死胡同。
struct TSPIstruct //
{
double Latitude;
double Longitude;
double Altitude;
};
void SendDataUDP(double latitude, double longitude, double altitude)
{
TSPIstruct TSPI;
TSPI = CompileTSPI(latitude, longitude, altitude);
//printf("nr");
printf("Sending GPS over UDP at %d", LastSystemTime);
printf("nr");
printf("nr");
//send the message
if (sendto(s, (char*)&(TSPI.Latitude), sizeof(double) , 0 , (struct sockaddr *) &si_other, slen) == SOCKET_ERROR)
{
printf("sendto() failed with error code : %d" , WSAGetLastError());
exit(EXIT_FAILURE);
}
printf("UDP packet sent, latitude is %f", TSPI.Latitude);
printf("nr");
printf("nr");
}
TSPIstruct CompileTSPI(double latitude, double longitude, double altitude)
{
TSPIstruct TSPI;
TSPI.Latitude = latitude;
TSPI.Longitude = longitude;
TSPI.Altitude = altitude;
return TSPI;
}
这可能是一个愚蠢的问题,但在发送二进制数据时,您不仅必须考虑填充/对齐,还必须考虑位排序。如果您确信µp artitecture在两侧都是相同的,您可以跳过后一点。在TCP中,他们添加了:
uint32_t htonl(uint32_t host32bitvalue) ;
等等。
如果你在同一台本地机器上尝试(即127.0.0.1),它能工作吗?
粘贴客户端和服务器代码。。我将在Unix和windows下尝试:)
相关文章:
- 没有从阵列<float>到阵列<int>的可行转换
- 为什么我会收到此错误?无法将 {lb, ub} 从<大括号括起来的初始值设定项列表>转换为 float(**)(float*, int)
- 如何将 qml 的文本转换为 float 和 int
- 有没有比static_cast更优雅的从int到float的演员阵容<float>?
- 如何在函数中将字符串和分数存储为(Int 或 float)
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 如何使用 std:from_chars 在 C++17 中从字符串转换为 int/float
- 如何修复 E2015 "ambiguity between pow(double,double) and pow(float,int)"
- C++优化从 int 到 float 的数组转换
- 如何在 c++ 中将数据从文件读取到 int/float 值
- 错误:二进制'operator*' 'int [1]'和'float'类型的操作数无效
- 功能使用INT和Float类型作为C 中的参数过载
- 内部字符串/字符如何在 int 和 float 中存储
- 无法将'int*'转换为参数'1'的'float*'
- 将 python list 作为 'float*' 或 'int*' 传递给 C/C++
- 在C++/Visual Studio中,通过给定数据格式(doubles、float、int、1位bools)的UDP发
- 当float转换为int时,此代码中是如何/为什么进行缩小的
- C++ 将字符串转换为 16 位无符号/有符号的 int/float
- C++:int*/float*到char*,为什么使用repret_cast会得到不同的结果
- 如何在等待用户输入int, float或其他类型时拒绝输入char/string