Array übergeben Verständnisproblem
-
Hallo ich habe da mal eine Frage,
wäre nett wenn mir jemand helfen könnte.
Also ich habe ein Array des Typs u_char(typdef für unsigned char).
Ich möchte die Adresse des Feldes an eine Funktion weitergeben.
Die Funktion erwartet allerdings einen u_short (typdef für unsigned char).Wiso um alles in der Welt funktioniert das denn nicht. Es ist doch egal ob an dieser Adresse jetzt ein short, integer, char oder sonst irgend etwas steht, die Adresse ist doch immer die selbe?--oder habe ich da etwas falsch verstanden?
Hier noch etwas Code zum besseren Verständnis:
u_char packet[62]; u_short test; test= CCommunikation::fCheckSum (&packet[14], 20) ;Hier die Funktion
u_short CCommunikation::fCheckSum (u_short auPseudoHeader[], u_short uLengt) { long v; u_short i; for (i=0; i<(uLengt >> 1); i++) v += auPseudoHeader[ i ]; if ((uLengt & 1)==1) v += (auPseudoHeader[ i ]<<8); return ~((v & 0xffff) + (v >> 16)); }Die Fehlermeldung ist dann:
error C2664: 'fCheckSum' : Konvertierung des Parameters 1 von 'unsigned char *' in 'unsigned short []' nicht moeglichVielen Dank für eure Hilfe
Gruß Tupo13
-
Wiso um alles in der Welt funktioniert das denn nicht. Es ist doch egal ob an dieser Adresse jetzt ein short, integer, char oder sonst irgend etwas steht, die Adresse ist doch immer die selbe?
Aber der Inhalt ist nicht derselbe (die Adresse sagt ja nur wo etwas steht, nicht was da steht), deine Funktion erwartet ein unsigned short, und was kriegt sie? Ein unsigned char. Was bezweckst du denn?
-
@ GPC
Danke Für deine AntwortAlso ich muss eine Checksumme Berechnen.
(das 16-bittige einerkomplement der summe aller einerkomplemente aller 16-bit wörter)Miene Annahme war:
Wenn 2 unsigned char Variablen hintereinander stehen (jede ein Byte groß).
Und ich dann eine unsigned short Variable(2 Byte) an die Adresse der ersten lege - dass dann die unsigned schort Variable die beiden 1 Byte großen unsigned char Variablen beinhaltetIst das falsch ?
-
Du willst also die Daten die als unsigned char vorliegen als unsigned short interpretieren ? Dann musst du das dem compiler auch sagen sonst denkt er du hast dich geirrt.
test= fCheckSum (reinterpret_cast<u_short *>(&packet[14]), 20) ;Kurt
-