char vs integer
-
moin moin
ich habe ein kleine verständnisproblem bei der anwendung von char und integer. Hoffentlich kann mir jemand ein tipp oder 2 geben. Der code enstammt einem funktionierendem projekt, das ich gerne verstehen möchte, da meine arbeit darauf aufbaut.
Der code ist aus einem protokol-stapel, der 4 serielle schnittstellen steuert, deshalb alles 4-fach. Es werden frames mit 4 char daten versendet. Hinzu kommt ein typ-feld und ein CRC-wert.
Für jede schnittstelle wird einen array aus 6 integers (16 bit) erstellt (FRAME_LENGTH = 6).
static unsigned int protocol_rx_data[4][FRAME_LENGTH]
Auf dem ersten platz liegt ein wert, der den typ des frames angibt, er wird im program kontrolliert ob er zwischen 0x0100 und 0x01FF liegt, also ist er eindeutig größer als ein byte.
Hier wird eine funktion erklärt, die 4+1 chars als argument nimmt.
void slave_handle_received_frame(unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4, unsigned char usart_id) {...
Was passiert hier, wo ein integer als argument verwendet wird?
slave_handle_received_frame(protocol_rx_data[usart_id][1],protocol_rx_data[usart_id][2],protocol_rx_data[usart_id][3],protocol_rx_data[usart_id][4], usart_id);
Wie gesagt, es funktioniert bestens, aber ich versteh halt nicht wie aus einem integer ein char wird, und umgekehrt.
Liege ich mit meiner vermutung richtig, daß wenn ich einem char einen integerwert zuteile, werden einfach nur die niedrigsten 8 bit zugeteilt?
mfg
Leon
Anbei, ich bin nicht so bewandert in C, verfüge aber über einige grundkenntnisse.
-
wenn du einen 'char' an eine funktion gibst, die einen integer erwartet, dann wird er automatisch zu einem 'int' erweitert.
wenn du einer 'char' variable einen 'int' zuweist, dann werden überschüssige bits abgeschnitten (oft bekommt man dabei ein warning wie 'possible loss of data').
-
Wenn er immer zwischen 0x0100 und 0x01FF liegt kann man auf das High-Byte 01 auch verzichten...
Schön ist das trotzdem nicht.