Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2017, 17:54   #1
Aoizora
Заблокирован
 
Регистрация: 11.11.2016
Сообщений: 261
По умолчанию Доступ к данным пакета при помощи своих функций

Здрасьте, у меня есть такой хедер в объявлениями структур протокола и функций для получения заголовка и данных:

Код:
/* Element in routing table */
#pragma pack(push, 1)
typedef struct
{
	uint32_t ip;
	uint16_t port;
	uint32_t time;
} client_node;
#pragma pack(pop)


/* DONT FORGET: add size of data */
#pragma pack(push, 1)
typedef struct
{
	char 	command;
	short 	size_of_data;
} header;
#pragma pack(pop)

/* Protocol properties */

void get_header(char *packet, header *hdr);
void get_data(char *packet, void *data);
Реализация этих функций такая:

Код:
void get_header(char *packet, header *hdr)
{
	memcpy(hdr, packet, sizeof(header));
}

void get_data(char *packet, void *data)
{
	header hdr;

	get_header(packet, &hdr);
	memcpy(data, packet, hdr.size_of_data);
}
Но почему-то эти функции работают неправильно. То есть получение данных при помощи вызова memcpy(&peer, &packet[sizeof(header)], sizeof(client_node)); дает правильные данные, а вызов get_data(packet, &peer) извлекает из пакета мусор. Где я ошибся?
Aoizora вне форума Ответить с цитированием
Старый 07.02.2017, 19:08   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

memcpy(data, packet + sizeof(header), hdr.size_of_data);

Только надо убедиться, что packet содержит нужный объем данных.
waleri вне форума Ответить с цитированием
Старый 08.02.2017, 03:55   #3
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

И не забыть про порядок байт.
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к данным потока. Landgraf132 C# (си шарп) 6 26.10.2015 13:02
QT, вызов и сохранение своих функций (консоль) Алексей_2012 Общие вопросы C/C++ 9 09.11.2014 18:18
Как получить доступ к данным kiber0net0 Помощь студентам 2 03.09.2008 08:14
доступ к данным подчиненной таблицы kopernik21187 БД в Delphi 5 21.08.2008 17:04
Доступ к данным buk Microsoft Office Excel 2 11.07.2007 09:44