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.