gpt4 book ai didi

c - 将 char 数组分解为结构

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:16 24 4
gpt4 key购买 nike

以防将来有人遇到这个问题,我会保留它。

*注意当从 C 客户端到 C 服务器时,这种方法不起作用。这只适用于 Java 客户端到 C 服务器。所以我不得不放弃这种方法。

好吧,我已经和 C 斗了太久了。我正在使用 UDP 将一些信息从 Java 客户端传递到 C 服务器。我可以在那里获取信息,但我不确定如何分解消息以存储到这样的结构中

struct __attribute__((__packed__)) clientMessage
{
short tml;
short rid;
char op;
char message[MAXBUFLEN-5];
};

我收到这样的消息其中测试是 char test[MAXBUFLEN-5];

if ((numbytes = recvfrom(sockfd, test, MAXBUFLEN-1, 0,
(struct sockaddr *)&their_addr, &addr_len)) == -1) {
perror("recvfrom");
exit(1);}

因此,我需要获取消息“7 2 1Yo”(两个 2 字节的短裤和一个 char 后跟未知消息长度)并将其存储到结构中的适当部分。消息被正确发送,我只是无法将其分解成我需要的信息位。我正在尝试

memcpy(&cm.rid, &test, 2);
memcpy(&cm.tml, &test[1], 2);
memcpy(&cm.op, &test[4], 1);
memcpy(&cm.message, &test[5], MAXBUFLEN-5);

但我的结果是

Message: Yo
OP: 1Yo
RID: 7 1Yo
TML: 2 7 1Yo

应该是

Message: Yo
OP: 1
RID: 2
TML: 7

我成功收到消息,但没有别的。我对 C 比较陌生,所以请原谅我的无知。我猜这真的很简单,但我不知道。

最佳答案

第一行应该是memcpy(&cm.rid, &test[0], 2);,因为地址应该是第一个字节的地址。

其余的:

memcpy(&cm.tml, &test[2], 2); // you want to get the third and forth byte, begin with index 2.
memcpy(&cm.op, &test[4], 1); // the fifth byte, begin with index 4.
memcpy(&cm.message, &test[5], MAXBUFLEN-5); // the rest bytes.

关于c - 将 char 数组分解为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com