![]() |
ENGLISH VERSION |
|
![]() |
Links | | | Forum | | | Kommentare | | | News melden |
![]() |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
![]() |
amiga-news.de Forum > Programmierung > AREXX und Little/Bigendian | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
17.07.2004, 10:35 Uhr hawe Posts: 130 Nutzer |
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 [ - Antworten - Zitieren - Direktlink - ] |
17.07.2004, 11:00 Uhr melior Posts: 160 Nutzer |
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é [ - Antworten - Zitieren - Direktlink - ] |
18.07.2004, 07:31 Uhr Palgucker Posts: 1342 Nutzer |
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 [ - Antworten - Zitieren - Direktlink - ] |
18.07.2004, 12:17 Uhr melior Posts: 160 Nutzer |
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. ] [ - Antworten - Zitieren - Direktlink - ] |
18.07.2004, 12:40 Uhr hawe Posts: 130 Nutzer |
Danke euch beiden, werde mich dann mal daran machen. -- cu hawe [ - Antworten - Zitieren - Direktlink - ] |
18.07.2004, 17:03 Uhr Palgucker Posts: 1342 Nutzer |
@ 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. ] [ - Antworten - Zitieren - Direktlink - ] |
20.07.2004, 12:15 Uhr melior Posts: 160 Nutzer |
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. ] [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > AREXX und Little/Bigendian | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
![]() |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |