Ich habe ein Zeichenfeld ohne Vorzeichen [248]; gefüllt mit Bytes. Wie 2F AF FF 00 EB ABCD EF ..... Dieses Array ist mein Byte-Stream, in dem ich meine Daten vom UART (RS232) als Puffer abspeichere.Konvertieren von Bytes zu Int/uint in C
Jetzt möchte ich die Bytes wieder in meine Uint16 und Int32 konvertieren.
In C# habe ich die BitConverter-Klasse dazu verwendet. Beispiel:
byte[] Array = { 0A, AB, CD, 25 };
int myint1 = BitConverter.ToInt32(bytes, 0);
int myint2 = BitConverter.ToInt32(bytes, 4);
int myint3 = BitConverter.ToInt32(bytes, 8);
int myint4 = BitConverter.ToInt32(bytes, 12);
//...
enter code here
Console.WriteLine("int: {0}", myint1); //output Data...
Gibt es eine ähnliche Funktion in C? (Kein .net, verwende ich den KEIL Compiler, weil Code auf einem Mikrocontroller läuft)
Mit freundlichen Grüßen Sam
Lösungen: Way A)
zuerst musste ich konvertieren oder das Array zu initialisieren ein uint8_t ARRAY [248]; Dann habe ich diesen Code mit Ihrer Hilfe:
uint32_t* myint1 = (uint32_t *)&RXBUFF[2]; //test
uint16_t* myint2 = (uint16_t *)&RXBUFF[6]; //test3
Achtung: Der int-Wert "1985" in hex als 0x07C1 in myint2 vertreten. das Byte, das ich sendete, war "C1 07", also ändert der Mikrocontroller die Byte-Reihenfolge
Ich werde die anderen Methoden auch prüfen.
WR Sam :)
was ist wenn sein großer Endian? – Sam
dann verschieben Sie die niedrigstwertigen Bits anstelle der höchstwertigen Bits. – devsnd
@twall, ich denke du meinst Bytes. –