Если кто-то получит эту проблему в будущем, я оставлю это.разбиение массива символов на структуру
* Примечание. Этот подход не будет работать при переходе с сервера C на сервер C. Это будет работать только с клиентом Java на сервере 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 байта и символ с последующей неизвестной длиной сообщения) и сохранить его в соответствующих частях структуры. Сообщение отправляется правильно, я просто не могу разбить его на бит информации, которая мне нужна. Я в настоящее время пытается
memcpy(&cm.rid, &test, 2);
memcpy(&cm.tml, &test[1], 2);
memcpy(&cm.op, &test[4], 1);
memcpy(&cm.message, &test[5], MAXBUFLEN-5);
Но мои resutls в конечном итоге
Message: Yo
OP: 1Yo
RID: 7 1Yo
TML: 2 7 1Yo
это должно быть
Message: Yo
OP: 1
RID: 2
TML: 7
я успешно получаю сообщение, но ничего другого. Я относительно новичок в C, поэтому простите мое невежество. Я предполагаю, что это очень просто, но idk.
По '// empty', вы имеете в виду' 0'? Почему это не 'char test [MAXBUFLEN]'? Почему содержимое 'test' инвертирует порядок' rid' и 'tml' в вашей структуре? Вы передаете указатель на массив в memcpy() как исходный адрес (вы не заметите разницы, если 'test' - массив, но он неправильного типа). Вы можете исправить, удалив '&', если вы имели в виду '& test [0]'. Не должно быть 'memcpy (& cm.tml, & test [2], 2);'? – jxh
Вы считали вопросы, связанные с вопросом? Кроме того, если 'rid' и' tml' являются двумя байтами, почему вы memcpy-ing в 'tml' из' & test [1] '? – MatthewD
Я бы также предложил упорядочить ваши члены структуры в соответствии с порядком их появления в сетевом потоке, ради здравого смысла. – MatthewD