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

[ - 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:
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. ]

[ - 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:
? - 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. ]

[ - 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.
.