单字节对齐

 
 
一、Visual Studio环境、Keil环境
#pragma pack (1)
 
二、Linux环境gcc
#define PACKED __attribute__((packed))
struct PACKED Gprs
{
 unsigned short head;
 unsigned char flag;
};
 
typedef struct _UsrPhrase
{
   
    char key;
    int x;

} __attribute__((packed)) UsrPhrase;

struct __attribute__((packed)) GprsWeight
{
unsigned short head;
unsigned char flag;
unsigned char company;
unsigned short addr;
unsigned short driver;
unsigned int weight;
unsigned int time;
unsigned int package;
unsigned char checksum;
};

 

转载于:https://www.cnblogs.com/unreal/archive/2012/03/15/2397494.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一个简的示例代码,用于接收 protobuf 消息并解码,假设消息头的长度为 4 字节、包含消息体长度和消息类型两个字段,消息体为 protobuf 格式: ```c++ #include <iostream> #include <cstring> #include <arpa/inet.h> #include <sys/socket.h> #include <netinet/in.h> #include <google/protobuf/message.h> using namespace std; using google::protobuf::Message; #define BUFSIZE 1024 // 解码消息头 struct MsgHeader { int32_t length; // 消息体长度 int32_t type; // 消息类型 }; // 接收数据 int recvData(int sock, char* buffer, int length) { int recvLen = 0; while (recvLen < length) { int ret = recv(sock, buffer + recvLen, length - recvLen, 0); if (ret < 0) { return -1; } recvLen += ret; } return recvLen; } // 接收并解析消息 bool receiveMessage(int sock, Message* message) { // 接收消息头 MsgHeader header; if (recvData(sock, (char*)&header, sizeof(header)) != sizeof(header)) { return false; } // 转换字节序 header.length = ntohl(header.length); header.type = ntohl(header.type); // 接收消息体 char body[BUFSIZE]; if (recvData(sock, body, header.length) != header.length) { return false; } // 解码消息体 if (!message->ParseFromArray(body, header.length)) { return false; } return true; } ``` 使用示例: ```c++ // 创建 TCP 客户端 socket int sock = socket(AF_INET, SOCK_STREAM, 0); // 连接服务器 struct sockaddr_in serverAddr; memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); serverAddr.sin_port = htons(8080); connect(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr)); // 接收并解析消息 MyMessage msg; if (receiveMessage(sock, &msg)) { // 处理消息 ... } // 关闭 socket close(sock); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值