Просмотр полной версии : struct NetworkPacket
Elecktron
10.12.2011, 17:22
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);
вот так в лог пишется только семь байт...
supernewbie
10.12.2011, 17:36
PNetworkPacket = ^TNetworkPacket;
TNetworkPacket = packed record
id: byte; // ID пакета
res: byte; // тут ничего нужного нет
id2: Smallint; // второй ID если есть
size: Smallint; // размер данных
res2: Smallint;
data: array of byte; // указатель на данные
end;
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]);//выводим по байту
}
синтаксис си по указателям не оч помню
Elecktron
10.12.2011, 19:58
пробую так:
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
wsprintfA(buf, "",packet->data[i]);
а указать в каком виде сохраняем...
wsprintfA(buf, "%x",packet->data[i]);
а может и ваще надо wsprintfA(buf, "%x",LPVOID(DWORD(packet->data)+i));
погугли работу с указателями, главной пойми packet->data это адресс в памяти где лежит содержимое пакета
Elecktron
10.12.2011, 21:14
спасибо заработало.
я провтыкал %х :)
осталось "нули повыравнивать", чтобы в логе красиво было..
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
#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;
}
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot