Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Byte invertieren / 1.Bit= 8.Bit, 2. Bit=7.Bit , usw. Kategorie: Programmierung (von André H. - 21.04.2003 8:47)
Als Antwort auf Re: Byte invertieren / 1.Bit= 8.Bit, 2. Bit=7.Bit , usw. von Wolf - 20.04.2003 23:30

Hallo Wolf,

Zuerst: Das hat nichts mit einer "Bit-Invertierung" zu tun.
Eine Bit-Invertirung wäre, wenn Du den Zustand von einzelnen Datenbits
invertieren willst.
Das ist aber eher ein tauschen von Bits.

Ich empfehle Dir die "Neuverdrahtung" durchzuführen.
Mit der Konvertierung verschwendest Du sonst nur unnötig Zeit.

Ansonsten würde ich, da Du die Daten Anscheinend direkt an einem
Byteport ausgibst, erst garnicht konvertieren, sondern die Ports Bitweise
nach den Daten zu setzen:

function setport_verdreht(byte Data)
{
  ports.set(7, Data and 0x01);
  ports.set(6, Data and 0x02);
  ports.set(5, Data and 0x04);
  ports.set(4, Data and 0x08);
  ports.set(3, Data and 0x10);
  ports.set(2, Data and 0x20);
  ports.set(1, Data and 0x40);
  ports.set(0, Data and 0x80);
}


So sparst Du Dir viel Rechenzeit.
Und wenn Du lieber das Byte vorher konvertieren willst, versuche mal das:


function convert_byte(byte Data) returns byte
{ byte x;
  x=Data shr 7;
  x=x or (Data shr 5 and 0x02);
  x=x or (Data shr 3 and 0x04);
  x=x or (Data shr 1 and 0x08);
  x=x or (Data shl 1 and 0x10);
  x=x or (Data shl 3 and 0x20);
  x=x or (Data shl 5 and 0x40);
  x=x or Data shl 7;
  return x;
}


MfG André H.


> Habe es gerade hinbekommen. Zwar nicht elegant, aber es klappt.
> Meine Lösung sieht so aus:
>
> function conv(byte orig) returns byte
> {
> byte neu;
> neu = 0;
> // 8.Bit
> if orig > 0b01111111
>  {orig = orig - 0b10000000;
>   neu = neu + 0b10000000;}
> neu = neu shr 1;
> // 7.Bit
> if orig > 0b00111111
>  {orig = orig - 0b01000000;
>   neu = neu + 0b10000000;}
> neu = neu shr 1;
> // 6.Bit
> if orig > 0b00011111
>  {orig = orig - 0b00100000;
>   neu = neu + 0b10000000;}
> neu = neu shr 1;
> // 5.Bit
> if orig > 0b00001111
>  {orig = orig - 0b00010000;
>   neu = neu + 0b10000000;}
> neu = neu shr 1;
> // 4.Bit
> if orig > 0b00000111
>  {orig = orig - 0b00001000;
>   neu = neu + 0b10000000;}
> neu = neu shr 1;
> // 3.Bit
> if orig > 0b00000011
>  {orig = orig - 0b00000100;
>   neu = neu + 0b10000000;}
> neu = neu shr 1;
> // 2.Bit
> if orig > 0b00000001
>  {orig = orig - 0b00000010;
>   neu = neu + 0b10000000;}
> neu = neu shr 1;
> // 1.Bit
> if orig > 0b00000000
>  {orig = orig - 0b00000001;
>   neu = neu + 0b10000000;}
> return neu;
> }
>
> Geht das nicht viel einfacher??
>
> GruÃ?,
> Wolf


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: