Hallo ich habe folgendes Problem. Ich übergebe eigentlich ein unsigned
char Array, der Compiler sagt mir das es nicht so ist wieso?
typedef struct
{
unsigned char eth_dst[6];
unsigned char eth_src[6];
unsigned char eth_type[2];
}ETHHEAD;
typedef struct
{
unsigned char arp_htyp[2];
unsigned char arp_ptyp[2];
unsigned char arp_len;
unsigned char arp_plen;
unsigned char arp_op[2];
unsigned char arp_smac[6];
unsigned char arp_sip[4];
unsigned char arp_dmac[6];
unsigned char arp_dip[4];
}ARP_HEADER;
typedef struct
{
ETHHEAD ethhead;
ARP_HEADER arphead;
}ARPPACKET;
ARPPACKET packet;
uint8_t i;
for(i=0;i<6;i++)
{
packet.ethhead.eth_dst[i] = arp_dmac[i];
packet.ethhead.eth_src[i] = mymac[i];
}
packet.ethhead.eth_type[0] = 0x80;
packet.ethhead.eth_type[1] = 0x60;
packet.arphead.arp_htyp[0] = 0x00;
packet.arphead.arp_htyp[1] = 0x01;
for(i=0;i<2;i++)
packet.arphead.arp_ptyp[i] = ptyp[i]; // Arp Typ
packet.arphead.arp_len = 0x06;
packet.arphead.arp_plen = 0x04;
if(op[0] == 1 || op[0] == 2)
{
for(i=0;i<2;i++)
packet.arphead.arp_op[i] = op[i];
}
else
{
return 255;
}
for(i=0;i<6;i++)
{
packet.arphead.arp_smac[i] = mymac[i];
packet.arphead.arp_dmac[i] = arp_dmac[i];
}
IP mip = getmyIP();
packet.arphead.arp_sip[0] =mip.a;
packet.arphead.arp_sip[0] =mip.b;
packet.arphead.arp_sip[0] =mip.c;
packet.arphead.arp_sip[0] =mip.d;
for(i=0;i<4;i++)
packet.arphead.arp_dip[i] = arp_dip[i];
enc_send_packet(sizeof(packet),packet);
Beim aufrufen der enc_send_packet( unsigned int len, unsigned char *buf
) Funktion gibt mir der Compiler für das 2 Argument einen "incompatible
type" Fehler. Jemand eine Idee ?
Vielen Danke im Vorraus
Alex
Entschludigt,habe noch Quelltext vergessen zwischen den
Typendefinitionen und dem erstellen des Packetes:
unsigned char ptyp[2];
ptyp[0]= 0x08;
ptyp[1]= 0x06;
unsigned char arp_dmac[6];
arp_dmac[0]= 0xFF;
arp_dmac[1]= 0xFF;
arp_dmac[2]= 0xFF;
arp_dmac[3]= 0xFF;
arp_dmac[4]= 0xFF;
arp_dmac[5]= 0xFF;
unsigned char arp_dip[4];
arp_dip[0]=169 ;
arp_dip[1]=254 ;
arp_dip[2]=10 ;
arp_dip[3]=55;
unsigned char op[2];
op[0]=0x00;
op[1]=0x01;
unsigned char mymac[6];
mymac[0]=0xFF;
mymac[1]=0xFF;
mymac[2]=0xFF;
mymac[3]=0xFF;
mymac[4]=0xFF;
mymac[5]=0xFF;
Grüsse
Alex
packet ist ein Struct, die Funktion erwartet einen char Pointer.
Machs mit einem Cast:
> enc_send_packet(sizeof(packet),(unsigned char*)packet);
EDIT:
Aber du solltest dir dann sicher sein, dass die Anordnung und
Ausrichtung der Bytes im Struct passt. Und nichts irgendwie auf 16-Bit
aligned wird....
Lothar Miller schrieb: > packet ist ein Struct, die Funktion erwartet einen char Pointer. > > Machs mit einem Cast: >> enc_send_packet(sizeof(packet),(unsigned char*)packet); 'packet' ist damit aber immer noch kein Zeiger.
1 | (unsigned char *)&packet |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.