short msg_id = 0x0001; // 登录消息类型
short msg_len = 14; // 整个登录消息的总长度,包括头部和内容
char username[] = "user";
char password[] = "123456";
// 构造 TLV 消息
char tlv_message[14]; // 2 字节的消息类型 + 2 字节的消息长度 + 10 字节的消息内容
// Type
memcpy(tlv_message, &msg_id, sizeof(short));
// Length
memcpy(tlv_message + sizeof(short), &msg_len, sizeof(short));
// Value
memcpy(tlv_message + 2 * sizeof(short), username, 4);
memcpy(tlv_message + 2 * sizeof(short) + 4, password, 6);
最终效果:
tlv_message
数组的内存布局将会是:
-
消息类型(Type):
tlv_message[0]
和tlv_message[1]
将分别是0x00
和0x01
,因为msg_id
是0x0001
。
-
消息长度(Length):
tlv_message[2]
和tlv_message[3]
将分别是0x00
和0x0E
,因为msg_len
是14
(即十六进制0x0E
)。
-
消息内容(Value):
tlv_message[4]
到tlv_message[7]
将是字符串 "user" 的 ASCII 值:u
(117),s
(115),e
(101),r
(114)。tlv_message[8]
到tlv_message[13]
将是字符串 "123456" 的 ASCII 值:1
(49),2
(50),3
(51),4
(52),5
(53),6
(54)。
最终的 tlv_message
数组内容如下:
{
0x00, 0x01, // 消息类型
0x00, 0x0E, // 消息长度
'u', 's', 'e', 'r', // 用户名
'1', '2', '3', '4', '5', '6' // 密码
}
这意味着 tlv_message
现在包含了一个完整的 TLV 格式消息,可以被发送给服务端进行处理。服务端接收到这个消息后,会根据 TLV 格式解析出消息的类型、长度,并从消息内容中提取出用户名和密码。