incompatibler typ warum ?

Gast #1255563
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
Gast
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
Moderator (Firma: Titel) Persönliche Seite
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....

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.