Ho un array di caratteri non firmati [248]; pieno di byte. Come 2F AF FF 00 EB AB CD EF ..... Questo array è il mio Byte Stream che memorizzo i miei dati dalla UART (RS232) come buffer.Converti byte in Int/uint in C
Ora voglio convertire i byte nei miei uint16 e int32.
In C# ho usato la classe BitConverter per fare ciò. ad esempio:
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...
Esiste una funzione simile in C? (No .net, io uso il compilatore KEIL perché il codice è in esecuzione su un microcontrollore)
Con saluti Sam
Solutions: Way A)
prima ho dovuto convertire o inizializzare l'array come un uint8_t ARRAY [248]; poi ho usato questo codice con il vostro aiuto:
uint32_t* myint1 = (uint32_t *)&RXBUFF[2]; //test
uint16_t* myint2 = (uint16_t *)&RXBUFF[6]; //test3
Attenzione: Il valore int "1985" in esadecimale è rappresentato come 0x07C1 in myint2. il Byte che ho inviato era "C1 07", quindi il microcontrollore sta modificando l'ordine dei byte
Testerò anche gli altri metodi.
WR Sam :)
e se fosse big endian? – Sam
quindi si spostano i bit meno significativi invece dei bit più significativi. – devsnd
@ twall, penso che tu intenda i byte. –