Bytes in einem Array drehen

Servus Leute,

ich hoffe ich trete hier mit meinem Topic keinem auf die Füße, habe auch nichts finden können was mir weitergeholfen hat, muss aber auch zugeben, dass ich noch ein Arduino und Progammier-Neuling bin.

Es geht darum dass ich ein Array vom Typen "byte" habe mit 8 Feldern bzw. Bytes. In den Bytes stehen hexadezimale Zahlen drin. Mein Problem ist nun, dass ich diese hexadezimalen Zahlen drehen muss. Die Reihenfolge von den Bytes im Array soll die gleiche bleiben, es sollen nur die einzelnen Zahlen gedreht werden.
Beispiel:

byte arduino[1] = 0x16
byte arduino[2] = 0x01

daraus soll dann werden:

byte arduino[1] = 0x61
byte arduino[2] = 0x10

Lyncht mich wenn das eine dumme Frage ist oder ich einfach nur die Antwort nicht gefunden habe! :blush:

Danke schonmal und freundliche Grüße!!!

Hallo,

Hexadezimale Zahlen befinden sich nicht im Array, höchstens Binärdaten :wink:

Wofür musst du die Daten tauschen? Sollen aus

0 1 2 3 4 5 6 7 8 -> 8 7 6 5 4 3 2 1 0 werden?

Wenn du nur die zwei Halb-Bytes tauschen willst ist das ganz einfach:

byte b= 0x16;
byte tmp = b >> 4;
b <<= 4;
b |= tmp;

"gedreht" ist das zwar nicht, sondern jeweils 4 bit vertauscht.

byte vertausche(byte b)
{
    return (b << 4) | (b >> 4); 
}

Verwendungsbeispiel:

 byte arduino[8] = {0x61, 0x01, 0xaf, 0xfe, 0x12, 0x34, 0x56, 0x78};
void setup()
{
    Serial.begin(9600);
   byte inoardu[8];
   for (byte i = 0; i < 8 ; i++)
   {
     inoardu[i] = vertausche(arduino[i]);
      Serial.print("Vorher : "); Serial.print(arduino[i],HEX);
      Serial.print("    nachher : ");  Serial.println(inoardu[i],HEX);
   }
}
void loop() {}

Bin auch ziemlich sicher, dass das nicht wirklich das ist was du brauchst :wink:

edit: wenn schon pampern, dann richtig

therealseco:
byte arduino[1] = 0x16
byte arduino[2] = 0x01

daraus soll dann werden:

byte arduino[1] = 0x61
byte arduino[2] = 0x10

Ein Byte hat acht Bits.
Du möchtest die linken vier Bits mit den rechten vier Bits vertauschen.

Also schiebst Du von der ursprünglichen Zahl vier Bits nach links und verknüpfst BITWEISE ODER mit derselben Zahl, bei der Du vier Bits nach rechts geschoben hast.

 arduino[i]= arduino[i]<<4 | arduino[i]>>4;

jurs:
Ein Byte hat acht Bits.
Du möchtest die linken vier Bits mit den rechten vier Bits vertauschen.

Ja genau! Hab mich wahrscheinlich falsch ausgedrückt, aber die Message kam ja trotzdem an! :slight_smile:

Ich werde mich mal heute an eure Lösungen machen und gucken ob mir das weiterhilft. Trotzdem schon vielen Dank für eure Beiträge!!

Ich brauche das für die Anzeige, ich glaube das hat was mit diesem Motorola to Intel Format zu tun. Jedenfalls steht das Ergebniss halt immer falsch rum in der Anzeige... :roll_eyes:

Du meinst Big-Endian und Little-Endian. Da geht es um ganze Bytes.

Ok, dann vergesst das schnell wieder XD