Wer keine Ahnung davon hat, wie Bits und Bytes ticken, der greift u.U. zur simpelsten (pfui) Lösung:
FUNCTION ByteInverter1
LPARAMETERS vValue as Integer
RETURN 255 - vValue
ENDFUNC
Wer zu denen gehört, die das duale/binäre Zahlensystem beherrschen werden evtl. dazu neigen, jedes Bit einzeln zu bearbeiten.
FUNCTION ByteInverter2
LPARAMETERS vValue as Integer
LOCAL liReturn as Integer , liLoop as Integer
FOR liLoop = 0 TO 7
vValue = IIF( ;
BITTEST( vValue , liLoop ) , ;
BITCLEAR( vValue , liLoop ) , ;
BITSET( vValue , liLoop ) ;
)
ENDFOR
RETURN vValue
ENDFUNC
Mit Hilfe der Funktionen BITTEST (zum auslesen des Bits), BITCLEAR (zum löschen des Bits) und BITSET (zum setzen des Bits), stellt dies auch kein wirkliches Problem dar. Natürlich vorausgesetzt wir denken daran, das Bits bei Position 0 beginnen... ;-)
Dumm ist nur, das die 'simpel'-Lösung um ein vielfaches kompakter ist... ;-)
Gott sei Dank gibt es eine VFP Funktion die das ebenfalls in einem 'professionelleren' Design als 1-Zeiler ermöglicht :-)
FUNCTION ByteInverter3
LPARAMETERS vValue as Integer
RETURN BITNOT( vValue ) + 256
ENDFOR
Wie gesagt: Es führen viele Wege zum Ziel...:-)
Keine Kommentare:
Kommentar veröffentlichen