我必须将以下结构复制到char []缓冲区中。 struct AMG_ANGLES { unsigned char bIsEnCrypted; unsigned char bIsError; unsigned short usErrorFlag; unsigned char byteNumDABs; unsigned short usBagId; unsigned short usKvMa; unsigned char byteDataType; }; AMG_ANGLES struct_data; struct_data.bIsEnCrypted = 1; struct_data.bIsError = 1; struct_data.usErrorFlag = 2; struct_data.byteNumDABs = 1; struct_data.usBagId =10; struct_data.usKvMa=20; struct_data.byteDataType = 1;// here I am coping structure to a char bufferchar sendbuf[sizeof(struct_data)] = "";memcpy(sendbuf,(char*)&struct_data, sizeof(struct_data));在复制时,缓冲区具有前两个未签名的char数据以及short(1,1,2)和大小仅为3个字节。扩孔数据未复制。请帮助我做错了。我也尝试过以下方法 memcpy(sendbuf+0, &struct_data.bIsEnCrypted, sizeof(struct_data.bIsEnCrypted)); memcpy(sendbuf+1, &struct_data.bIsError, sizeof(struct_data.bIsError)); memcpy(sendbuf+2, &struct_data.usErrorFlag, sizeof(struct_data.usErrorFlag)); memcpy(sendbuf+4, &struct_data.byteNumDABs, sizeof(struct_data.byteNumDABs)); memcpy(sendbuf+6, &struct_data.usBagId, sizeof(struct_data.usBagId)); memcpy(sendbuf+8, &struct_data.usKvMa, sizeof(struct_data.usKvMa)); memcpy(sendbuf+10, &struct_data.byteDataType, sizeof(struct_data.byteDataType));我得到的结果相同。 最佳答案 您的代码很好;您确定缓冲区内容是否正确的方法存在缺陷。您没有告诉我们如何确定缓冲区的内容有误,但是从您的描述中我怀疑您做了类似printf( "%s\n", sendbuf )的操作。好吧,那是行不通的,因为缓冲区实际上并不包含字符,而是包含二进制数据。具体来说,您的short usErrorFlag长为两个字节,并且由于您存储在其中的值是2,这意味着它将以两个连续的字节存储在sendbuf中,因此一个字节的值将为0x02下一个字节的值将为0x00。 (假设您的描述提示您的硬件是“ Little Endian”。)因此,当您尝试以字符串形式查看sendbuf的内容时,一旦printf()遇到字节。因此,您的代码是正确的。继续将0x00发送到UDP套接字。
09-06 20:37