DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > AREXX und Little/Bigendian | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2004-07-17, 10:35 h hawe Posts: 130 User |
Hallo zusammen, möchte mit Arexx eine Struktur erstellen. Das Problem ist nur das die INT Werte für die Anwendung mit dem LowByte voran übertragen werden müssen. Hat jemand eine Lösung für mich? -- cu hawe [ - Answer - Quote - Direct link - ] |
2004-07-17, 11:00 h melior Posts: 160 User |
Zitat: Möglicherweise nicht der eleganteste Weg: Ganzzahlarithmetik highByte = oldValue % 256 lowByte = oldValue // 256 newValue = lowByte * 256 + highByte Ich habe hier angenommen, daß die INT-Werte 16 Bits lang sind. Für 32-Bit-Zahlen mußt Du die Zahl auf die gleiche Weise in 4 Bytes zerlegen. Tschüß André [ - Answer - Quote - Direct link - ] |
2004-07-18, 07:31 h Palgucker Posts: 1342 User |
Vielleicht kannst Du auch einfach die Reverse-Funktion von Arexx nutzen. Etwa so...code:/* */ String="Test" Intwert=c2d(String) Verdreht=C2D(Reverse(D2C(Intwert))) say d2c(Verdreht) mfg Palgucker [ - Answer - Quote - Direct link - ] |
2004-07-18, 12:17 h melior Posts: 160 User |
Zitat: REVERSE ist ungeeignet, weil bei der Umwandlung zwischen big und little endian immer komplette Bytes vertauscht werden müssen, aber Du hast mich auf eine Idee gebracht. So müßte es gehen: /* does a big/little endian conversion */ PARSE ARG number IF LENGTH(number) = 0 THEN DO SAY "required argument missing" EXIT 20 END hexNumber = RIGHT(D2X(number), 8, '0') SAY "convert" number "(" || hexNumber || "H)" convertedHexNumber = SUBSTR(hexNumber, 7, 2) || SUBSTR(hexNumber, 5, 2) || SUBSTR(hexNumber, 3, 2) || SUBSTR(hexNumber, 1, 2) convertedNumber = X2D(convertedHexNumber) SAY " =>" convertedNumber "(" || convertedHexNumber || "H)" Tschüß André [ Dieser Beitrag wurde von melior am 18.07.2004 editiert. ] [ - Answer - Quote - Direct link - ] |
2004-07-18, 12:40 h hawe Posts: 130 User |
Danke euch beiden, werde mich dann mal daran machen. -- cu hawe [ - Answer - Quote - Direct link - ] |
2004-07-18, 17:03 h Palgucker Posts: 1342 User |
@ melior quote: REVERSE ist ungeeignet, weil bei der Umwandlung zwischen big und little endian immer komplette Bytes vertauscht werden müssen, ... ? - Ich meine, das ist genau die Aufgabe von Reverse, eben ganze Bytes (Characters) in ihrer Reihenfolge zu vertauschen. Allerdings hast Du recht, das man mit Reverse allein beim convertieren durch das verlorengehen führender Nullen schnell zu völlig falschen Ergebnissen kommt. Ich habe mal Dein Script so abgeändert, das es auch mit Reverse geht. Durch die etwas "hakelige" convertierung von convertedHexNumber "frisst" es jetzt auch negative Werte. code:/* does a big/little endian conversion */ PARSE ARG number IF LENGTH(number) = 0 THEN DO SAY "required argument missing" EXIT 20 END SAY "convert" number "(" || D2X(number,8) || "H)" convertedHexNumber=C2X(Reverse(x2c(d2x(number,8)))) convertedNumber=X2D(insert("0",convertedhexnumber,Length(convertedHe xNumber),8-Length(convertedHexNumber),"0")) SAY " =>" convertedNumber "(" || D2X(convertedNumber,8) || "H)" mfg Palgucker [ Dieser Beitrag wurde von Palgucker am 18.07.2004 editiert. ] [ - Answer - Quote - Direct link - ] |
2004-07-20, 12:15 h melior Posts: 160 User |
Zitat: Du hast recht, es funktioniert tatsächlich, wenn man REVERSE nicht auf Zahlen, sondern auf Strings anwendet. Sehr schön! Tschüß André [ Dieser Beitrag wurde von melior am 20.07.2004 editiert. ] [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > AREXX und Little/Bigendian | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |