Re: Bytearray umwandeln in Zahl mit Vorzeichen Kategorie: Programmierung (von André H. - 10.02.2006 21:35) | ||
Als Antwort auf Re: Bytearray umwandeln in Zahl mit Vorzeichen von Felix W. - 10.02.2006 20:29 | ||
| ||
Hallo Felix, > > 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; > } Gut, Du hast eine universelle Funktion gebaut. Die For-Schleife macht das aber unnötig langsamer. Besser ist es, da es hier ja nur zwei sinnvolle Möglichkeiten gibt, diese mit if zu unterscheiden. Au�erdem wird Deine Funktion Probleme mit negativen 24-Bit-Werten haben. Denn, zum Zusammensetzen von einem Integer wird man die Funktion kaum benutzen, da man so unnotig in Long-Werte benutzt. Daher wäre ausführungstechnisch z.B. das schneller: function getValue (byte arraywert[], byte posLow, byte len) returns long {// len=3 oder 4 long wert; int i; //max. 32bit / 4 Byte if len==3 { wert=((arraywert[poslow+2] and 0x80)!=0 shl 7) or (arraywert[poslow+2] and 0x7F); return (arraywert[poslow+1] shl 8) or arraywert[poslow] or (wert shl 16); } if len==4 { wert=(arraywert[poslow+3] shl 8) or (arraywert[poslow+2] and 0x7F); return (arraywert[poslow+1] shl 8) or arraywert[poslow] or (wert shl 16); } } > 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... Natürlich kannst Du Arrays zurückgeben. OK, nicht direkt zuückgebe, aber der Funktion als Referenz übergeben und so direkt bearbeiten: function putValue (long wert, byte posLow, byte posHigh, byte Out_Array[]) { int i; for i=posLow...posHigh {Out_Array[i]=wert shr (i-posLow)*8;} } ... ... byte Daten[4]; ... putValue(1234567,0,3,Daten); In "Daten[]" hast Du nun die Daten. ;-) MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: |