Программинг Форум для тем связанных с программированием
10.12.2011, 17:22
#1
Местный
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
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);
вот так в лог пишется только семь байт...
10.12.2011, 17:36
#2
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
delphi Код:
PNetworkPacket = ^TNetworkPacket;
TNetworkPacket = packed record
id: byte ; // ID пакета
res: byte ; // тут ничего нужного нет
id2: Smallint ; // второй ID если есть
size: Smallint ; // размер данных
res2: Smallint ;
data: array of byte ; // указатель на данные
end ;
__________________
Н а ч а л о .
10.12.2011, 17:44
#3
Рыцарь
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
Цитата:
Сообщение от
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 нажился спасибкой от:
10.12.2011, 19:58
#4
Местный
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
пробую так:
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
10.12.2011, 20:23
#5
Рыцарь
Регистрация: 13.10.2009
Сообщений: 665
Сказал Спасибо: 38
Имеет 172 спасибок в 108 сообщенях
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 нажился спасибкой от:
10.12.2011, 21:14
#6
Местный
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
спасибо заработало.
я провтыкал %х
осталось "нули повыравнивать", чтобы в логе красиво было..
Код:
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
14.12.2011, 17:02
#7
Пользователь
Регистрация: 18.09.2010
Адрес: Киев
Сообщений: 70
Сказал Спасибо: 9
Имеет 10 спасибок в 6 сообщенях
Код:
#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;
}
__________________
Все относительно...
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
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
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!