amiga-news 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ö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.


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:
Vielleicht kannst Du auch einfach die Reverse-Funktion von Arexx nutzen.

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:
? - Ich meine, das ist genau die Aufgabe von Reverse, eben ganze Bytes (Characters) in ihrer Reihenfolge zu vertauschen.

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-2024 by amiga-news.de - alle Rechte vorbehalten.
.