c - 在一个 charArray 中发送大量值

标签 c char udp

我目前正在努力通过 UDP 发送一些值。

主要问题是我有很多值(value)观。 如果我单独发送每个值,它就可以正常工作。

char imu_x[16];
char imu_y[16];
char imu_z[16];
char mag_x[16];
char mag_y[16];
char mag_z[16];
char g_y[16];
char g_p[16];
char g_r[16];
char tmp[16];
char prs[16];
char ti[16];
char Motor1[16];
char Motor2[16];
char Motor3[16];
char Motor4[16];

//Timestamp
sendto(clientSocket,ti,sizeof(ti),0,(struct sockaddr *)&serverAdress,addressSize);

//acceleration data
sendto(clientSocket,imu_x,accx,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,imu_y,accy,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,imu_z,accz,0,(struct sockaddr *)&serverAdress,addressSize);

//Mag data
sendto(clientSocket,mag_x,magx,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,mag_y,magy,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,mag_z,magz,0,(struct sockaddr *)&serverAdress,addressSize);

//Gyro Data
sendto(clientSocket,g_y,gy,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,g_p,gp,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,g_r,gr,0,(struct sockaddr *)&serverAdress,addressSize);

//Temperature and Pressure
sendto(clientSocket,tmp,temp,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,prs,press,0,(struct sockaddr *)&serverAdress,addressSize);

// Motor Data
sendto(clientSocket,Motor1,m1,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,Motor2,m2,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,Motor3,m3,0,(struct sockaddr *)&serverAdress,addressSize);
sendto(clientSocket,Motor4,m4,0,(struct sockaddr *)&serverAdress,addressSize);

那些是发送调用。

是否有可能将它们“合并”到一个发送调用中?

我已经尝试使用 strcat 但我的 char 缓冲区溢出并且循环终止。

如果有人知道解决方案,如果你能与我分享我会很高兴

周末愉快 =)

最佳答案

看起来像 16 个数组,每个 16 字节,所以声明一个大小为 256 的缓冲区,然后 memcpy 将数组放入缓冲区:

char buffer[256];
char *data[16] = { imu_x, imu_y, imu_z, mag_x, mag_y, mag_z, g_y, g_p, g_r, tmp, prs, ti, Motor1, Motor2, Motor3, Motor4 };
for ( int i = 0; i < 16; i++ )
    memcpy( buffer + i*16, data[i], 16 );

然后您可以使用单个 sendto 发送缓冲区,并在接收端使用类似的代码来解压缓冲区。

关于c - 在一个 charArray 中发送大量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38807783/

相关文章:

java - 有人有 MediaRecorder 与 ParcelFileDescriptor.fromDatagramSocket 一起使用吗?

node.js - Nodejs - UDP 如何检测已绑定(bind)的端口

c - 用 0 而不是 '\0' 终止 c 字符串是错误的吗?

c - 打印字符数组

c++ - 将 ifstream 逐字读入 char*

char * 设置为字符串文字时的编译器警告

node.js - 在 Express 中监听 UDP 消息

C:从文件中读取未知数量的未知长度的行

c - 编写调用过程中dll调用的问题

c - 在函数中通过指针修改 char* 会导致崩溃