Verständnisproblem Strings/Array's in C

Ach so, das ist Big Endian.

Schaut nicht besonders schön aus, aber:
C:
void addShort(void *destBE, void *src1BE, void *src2LE)
{
	((unsigned char *)destBE)[0] = ((unsigned char *)src1BE)[0] + ((unsigned char *)src2LE)[1];
	if((((unsigned char *)src1BE)[1] + ((unsigned char *)src2LE)[0]) < ((unsigned char *)src1BE)[1])
		((unsigned char *)destBE)[0]++;
	((unsigned char *)destBE)[1] = ((unsigned char *)src1BE)[1] + ((unsigned char *)src2LE)[0];
}

...

addShort(SendData, ReceiveData, &pin);
 
ok.... habe es geändert, aber funktioniert immer noch net.

Code:
*((short *)(&SendData[4])) = *((short *)(&ReceiveData[4])) + pin;
Code:
			{char SendData[6];
			SendData[0]=0x27;
			SendData[1]=0x04;
			SendData[2]=ReceiveData[2],
			SendData[3]=ReceiveData[3];
			addShort(SendData[4], ReceiveData[4], &pin);
			SendObdCommand(SendData, 6);}
			ReceiveObdCommand();

In ReceiveData steht:
00 01 02 03 04 05=[Bytestelle]
67 03 63 88 0A AE ist die Zahl mit der der pin addiert werden muss

die berechnete Antwort im SendObdCommand wenn Pin=1 ist:
00 01 02 03 04 05=[Bytestelle]
27 04 63 88 55 AA wird gesendet
 
Zuletzt bearbeitet:
habe ich in einem anderen Forum gefunden, kann ich damit nich was anfangen?

Code:
short swap_bytes(short data)
{
    unsigned char low, high;

    high = (data >> 8) & 0x00FF;
    low = data & 0x00FF;

    return (low << 8) + high;
}

Theorie: ReceiveData short swappen, dann addieren und Ergebnis wieder zum Senden swappen

aber k.a. wie ich das einbinden soll...
 
Sory, ich habe die Indize vergessen
(das sollte so nicht mal kompilieren?)
Ruf es so auf
C:
addShort(&SendData[4], &ReceiveData[4], &pin);

Zum Swappen: Geht auch.
Alles, was nicht LE ist (also jeweils die beiden Byte von SendData und ReceiveData)
swappen, den pin addieren, nochmal swappen.

Die gezeigte Funktion macht die Bytevertauschung für eine tatsächliche short-Variable.
Bei dir sinds ja nur zwei Byte, die ein short sein sollen;
du kannst einfach die beiden Byte tauschen.
C:
hilfsvariable = ReceiveData[4];
ReceiveData[4] = ReceiveData[5];
ReceiveData[5] = hilfsvariable;
Sowas in der Art einfach
(da ists ja schön, dass short nur zwei Byte hat, bei 4 oder 8 wird der Code länger :D)
Kann man natürlich auch in eine Funktion packen,
und/oder auch ohne Zusatzvariable machen (dafür etwas langsamer: Xor-Kombi)
 
wenn ich das mit der o.g. swap_bytes Funktion mache wie muss dann der Befehl aussehen?

Code:
*((short *)(&SendData[4])) = *((short *)(&ReceiveData[4])) + pin;

Code:
swap_bytes(*((short *)(&SendData[4])))= swap_bytes(*((short *)(&ReceiveData[4])) + pin);

klappt nicht irgendwie nicht...
 
Mach es nicht. Du hast doch schon Bytes.
Warum die Bytes in short umwandeln, nur damit das short wieder zu Bytes gemacht wird?
 
Zurück