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

Re: Bytearray umwandeln in Zahl mit Vorzeichen Kategorie: Programmierung (von Felix W. - 10.02.2006 20:29)
Als Antwort auf Re: Bytearray umwandeln in Zahl mit Vorzeichen von Matthias Koch - 9.02.2006 19:51
Ich nutze:
C-Control II Station, OSOPT V3.0
Hallo,

erstmal danke an alle, die hier geantwortet haben.
Ich arbeite jetzt mit folgender Funktion, und es funktioniert sehr gut:


function getValue (byte arraywert[], byte posLow, byte posHigh) returns long
{
  long wert; int i; //max. 32bit / 4 Byte
  wert=arraywert[posLow];
  for i=posLow+1...posHigh
    {wert=wert or (arraywert[i] shl (i-posLow)*8);}
  return wert;
}


mit posLow und posHigh gebe ich an, von wo nach wo in dem
8-Byte-Array der umzuwandelnde Wert steckt.

Hiermit wandle ich andersrum:


function putValue (long wert, byte posLow, byte posHigh)
{
  int i;
  for i=posLow...posHigh {Out_Array[i]=wert shr (i-posLow)*8;}
}


Schade, dass keine Arrays zurückgegeben werden können, sodass Out_Array[]
global sein muss...

Viele Grü�e,

Felix W.

> > Hallo KönigDichBauch,
> >  
> > > function getlong(byte b[], int p) returns long
> > > {
> > >   long l;
> > >
> > >   l = b[p+0];
> > >   l = l or b[p+1] shl 8;
> > >   l = l or b[p+2] shl 16;
> > >   l = l or b[p+3] shl 24;
> > >
> > >   return l;
> > > }

> >
> > Eine kleine Optimierungsanmerkung:
> > Wenn Du es so schreibst, ist die Ausführungen etwas schneller und es wird weniger
> > Speicherplatz benötigt:
> > function getlong(byte b[], int p) returns long
> > {
> >   long l;
> >
> >   l = b[p+0] or b[p+1] shl 8;
> >   return l or b[p+2] shl 16
> >            or b[p+3] shl 24;
> > }

> >
> > Die Funktion bleibt natürlich dieselbe.
> >
> > MfG André H.
> >
> Guten Abend K_D_B und André,
> ich habe diese Routine mal im Simulator getestet, leider ohne Erfolg.
> Das shl 8 auf eine Bytevariable geht wohl deshalb noch, da intern immer 16 Bit zur Verfügung stehen.
> Shl 16 auf eine Byte-Variable funktioniert, wie gesagt, bei mir im Simulator nicht. Möglicherweise habt ihr das
> auf der CCII getestet???
> Jedoch grundsätzlich versagt diese Routine beim Umwandeln von 24 Bit 2er-komplemtärzahlen, da bei der
> equatation in long-typen das höchstwertige Byte immer mit 0x00 aufgefüllt wird was natürlich bei negativen
> Zahlen zu einem Fehler führt.
> Gebt mir mal einen Tip woran es bei mir im Simulator haken könnte.
>
> mfg Matthias
>
>
>
>
>


    Antwort schreiben


Antworten:

Re: Bytearray umwandeln in Zahl mit Vorzeichen (von André H. - 10.02.2006 21:35)