Товарищи, допустим есть такой код (структура. Не знаю как правельно это называется): Code: typedef struct packet { int num; char[8] msg; } И есть вот такое дело: Code: char buff[] = { 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00 }; //значение могут быть другие, это не важно struct packet pack; Так вот мне нужно загнать buff в структуру packet. Тоесть чтобы у переменной pack были значение buff и я мог обратится к pack.num и тд Конечно можно считать 4 байта в pack.num ,а потом 8 байт в pack.msg ,НО это не красиво, да и структура может быть другой (гараздо больше и тд ) Вообщем подскажите, если вы меня поняли зы не могу спросить у google так-как не знаю как правельно постоить такой вопрос.
Начнем с того что описание структуры будем писать так Code: [b]typedef[/b] [b]struct[/b] { [b]int[/b] num; [b]char[/b] msg[8]; [color=gray]// а не char[8] msg[/color] } packet; только тут байтов - 8 + sizeof( num ) = 8 + 4 = 12 а буфер у тебя 15. Но первые 12 байт всеравно можно загнать, тоесть если я тебя понял, как бы наложить на структуру. Непосредственное копирование памяти: Code: packet p; memcpy( &p, buff, [b]sizeof[/b]( buff ) ); Тогда можно будет обращаться так p.num Или просто ставим указатель на структуру на адрес буфа Code: packet [b]*[/b]p; [color=gray]// как указатель на структуру packet[/color] p = (packet[b]*[/b])buff; Тогда можно будет обращаться так p->num В твоем случае в num получается 1049088 или 0x100200 Вопрос ты задал довольно корректно, что странно для форума.античат.ру тест: Code: [b]#include[/b] <stdio.h> [b]#include[/b] <windows.h> [b]typedef struct[/b] { [b]int[/b] num; [b]char[/b] msg[8]; } packet; [b]char[/b] buff[] = { 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00 }; [b]int[/b] main( [b]int[/b] argc, [b]char*[/b] argv[] ) { [color=gray]// вариант 1[/color] packet *p = (packet*)buff; printf( "p->num=%d\n", p->num ); [color=gray]// вариант 2[/color] packet p2; memcpy( &p2, buff, sizeof( buff ) ); printf( "p2.num=%d\n", p2.num ); [b]return[/b] 0; }
А почему перед "return 0;" не написана строка " getchar(); " У меня без этой строчки программа запускается и тут же исчезает!
fucker"ok, не забудь, что размер буфера и структуры различны (судя по примеру). memcpy(&p2, buff, sizeof( buff )) тут не прокатит, надо наоборот: memcpy( &p2, buff, sizeof( packet )); иначе при копировании хвост структуры будет перезаписан. бугага, Кез, ты кстати парню уязвимость впарил. причем ту о которой статью писал =)