Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 10.12.2011, 17:22   #1
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию struct NetworkPacket

struct NetworkPacket
{
unsigned char id, _padding1, exid, _padding2;
unsigned short size, _padding3;
unsigned char * data;
};

id, exid - айди пакета.
size - размер пакета.
data - данные? как их получить?
_padding - что это?

Код:
wsprintfA(buf, "Packet id=0x%x, size=0x%x, data=%x", packet->id, packet->size, packet->data);
вот так в лог пишется только семь байт...
Elecktron вне форума   Ответить с цитированием
Старый 10.12.2011, 17:36   #2
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

delphi Код:
PNetworkPacket = ^TNetworkPacket;   TNetworkPacket = packed record     id: byte// ID пакета     res: byte; // тут ничего нужного нет     id2: Smallint; // второй ID если есть     size: Smallint; // размер данных     res2: Smallint;     data: array of byte; // указатель на данные   end;
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 10.12.2011, 17:44   #3
Рыцарь
 
Аватар для Morfik
 
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
Morfik пока неопределено
По умолчанию

Цитата:
Сообщение от Elecktron Посмотреть сообщение
struct NetworkPacket
{
unsigned char id, _padding1, exid, _padding2;
unsigned short size, _padding3;
unsigned char * data;
};

id, exid - айди пакета.
size - размер пакета.
data - данные? как их получить?
_padding - что это?

Код:
wsprintfA(buf, "Packet id=0x%x, size=0x%x, data=%x", packet->id, packet->size, packet->data);
вот так в лог пишется только семь байт...
_padding это мусор

data - данные? как их получить?
unsigned char * data;

data это указатель (адресс) где лежат твои данные размером size

for (int i=0;i<size;i++)
{
printf("%x ",data[i]);//выводим по байту
или
printf("%x ",*data[i]);//выводим по байту
}

синтаксис си по указателям не оч помню
__________________
каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти

служба поддержки 4gay - ICQ 642274822
Morfik вне форума   Ответить с цитированием
За это сообщение Morfik нажился спасибкой от:
Старый 10.12.2011, 19:58   #4
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию

пробую так:
for (int i=0;i<packet->size;i++)
{
wsprintfA(buf, "",packet->data[i]);
"функция сохранения в файл"(buf);
}
сохраняет какуюто невменяемую билиберду:

Packet id=0x0, size=0xb7, data=6b636150
Packet id=0x1, size=0xf, data=6b636150
Elecktron вне форума   Ответить с цитированием
Старый 10.12.2011, 20:23   #5
Рыцарь
 
Аватар для Morfik
 
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
Morfik пока неопределено
По умолчанию

wsprintfA(buf, "",packet->data[i]);

а указать в каком виде сохраняем...
wsprintfA(buf, "%x",packet->data[i]);

а может и ваще надо wsprintfA(buf, "%x",LPVOID(DWORD(packet->data)+i));

погугли работу с указателями, главной пойми packet->data это адресс в памяти где лежит содержимое пакета
__________________
каждый раз, когда ты пишешь int i вместо short i, сотни пользователей вынуждены докупать планку памяти

служба поддержки 4gay - ICQ 642274822
Morfik вне форума   Ответить с цитированием
За это сообщение Morfik нажился спасибкой от:
Старый 10.12.2011, 21:14   #6
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию

спасибо заработало.
я провтыкал %х
осталось "нули повыравнивать", чтобы в логе красиво было..

Код:
   for (int i=0;i<packet->size;i++)
   {
    wsprintfA(buf, "%x",packet->data[i]);
    "функция сохранения в файл"(buf);
    "функция сохранения в файл"(" ");
   }
кусок лога:

Код:
Packet id=0xfe, size=0x7c
7 0 0 0 1 0 0 0 67 0 6c 0 75 0 64 0 69 0 6f 0 0 0 2 0 0 0 64 0 69 0 6f 0 6e 0 0 0 3 0 0 0 67 0 69 0 72 0 61 0 6e 0 0 0 4 0 0 0 6f 0 72 0 65 0 6e 0 0 0 5 0 0 0 61 0 64 0 65 0 6e 0 0 0 6 0 0 0 69 0 6e 0 6e 0 61 0 64 0 72 0 69 0 6c 0 65 0 0 0 7 0 0 0 67 0 6f 0 64 0 61 0 72 0 64 0 0 0 0 0
Elecktron вне форума   Ответить с цитированием
Старый 14.12.2011, 17:02   #7
Пользователь
 
Аватар для ALF
 
Регистрация: 18.09.2010
Адрес: Киев
Сообщений: 70
Сказал Спасибо: 9
Имеет 10 спасибок в 6 сообщенях
ALF пока неопределено
По умолчанию

Код:
#pragma pack(push, 1)
struct NetworkPacket
{
    unsigned char Id, _padding1, exid, _padding2;
    unsigned short size, _padding3;
    unsigned char* data;
};
#pragma pack(pop)
char* data - УКАЗАТЕЛЬ на данные

Код:
void __stdcall NetworkPacketDump( NetworkPacket* np )
{
	int Id = np->Id;
	switch (Id)
	{
		case 0x19: //npcHtmlMessage
		{
			DumpHtml((NpcHtmlMessage *)(np->data));
		}
		case 0x0C: //NpcInfo
		{
			ParseNpc((NpcInfo *)(np->data));
		}
	}
	return;
}
__________________
Все относительно...
ALF вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 02:56.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!