Anmelden

View Full Version : Hexadezimal in Dezimal --> X2D



Seiten : 1 [2] 3

Kampi4
29-08-08, 12:16
Ja, ich rege mich auch seit 2 Tagen auf, dass es sowas nicht auf der AS400 gibt. Eigentlich unmöglich sowas. Das Thema hat mich bisher bestimm 10 Arbeitsstunden gekostet :mad:

In der Firma wollen wir leider am besten nur AS400 + VARPG machen und keine kleinen Zusatzprogramme haben.

Bin ja jetzt auch der Lösung relatib nah. Aufgegeben wird nicht :D

Mfg KAMPI

E305GL
29-08-08, 12:33
..ganz einfach:
kein MOVE sondern mit Z-ADD binär nach numerisch, funktioniert bei uns im RPG400, ILE, VARPG

Kampi4
29-08-08, 12:53
Auch mit Z-ADD bekomme ich keinen richtigen Wert.

Habe jetzt mal versucht den Hex-Wert an die AS400 zu übergeben und da im Programm die Umrechnung zu machen. Leider kommt da nicht der Hex Wert an, wie ich ihn im VARPG übergebe. Wie kann das denn sein?!!?

So langsam verzweifel ich. Ich meine, ich will nur zwischen zwei Zahlensystemen umrechnen. Das ist normal eine Befehl und Arbeit von 10 Sekunden!!!!


Danke für eure Hilfe!

Mfg KAMPI

E305GL
29-08-08, 12:58
beim Datenaustausch mit AS/400 erfolgt bei char-Feldern eine EBCDIC ASCII konvertierung

BenderD
29-08-08, 13:05
... das hat mit der AS/400 wenig zu tun, wer Schmutzbuckelig programmiert, muss mit sowas rechnen. Zu den Schmutzbuckeleien zählen hier unter anderem:
- Redefinition von Speicherbereichen, beliebt in RPG und COBOL
- rechnen mit Pointern, beliebt in C
- memcopy beliebt in C und Assembler
- u.v.m. (soll kein Kurs werden)

gerne wird sowas verwendet von Programmierern, die sich für tricky halten

gefördert wird das von Programmiersprachen die mit Typbindung huddeln, wie RPG, Assembler und (teilweise) C

erschwert wird das von defensiven Programmiersprachen wie ALGOL, PASCAL und Java

in den ganz wenigen Fällen (ob deiner dazu gehört ist noch fraglich), wo man solchen Unfug braucht, gehört sowas in eine gekapselte Funktion mit ordentlichen Prüfungen.

D*B


Ja, ich rege mich auch seit 2 Tagen auf, dass es sowas nicht auf der AS400 gibt. Eigentlich unmöglich sowas. Das Thema hat mich bisher bestimm 10 Arbeitsstunden gekostet :mad:

In der Firma wollen wir leider am besten nur AS400 + VARPG machen und keine kleinen Zusatzprogramme haben.

Bin ja jetzt auch der Lösung relatib nah. Aufgegeben wird nicht :D

Mfg KAMPI

Fuerchau
29-08-08, 13:06
AMD und Intel sind da kompatibel, da sonst keine Software laufen würde (z.B. Pointer sind immer 32-Bit (bz. bei 64-Bit eben 64).
Motorola (e.g. Mac) arbeitet da wieder wie die AS/400.

Für diese Umrechnung musst du nun eben Byteweise arbeiten, da die Interpretation eine 2/4/8-Byte-Integers auf Intel eben w.o. läuft.

Also:

D DSHex DS inz
D MyInt1 3U 0
D MyInt2 3U 0

MyInt1 * 256 + MyInt2

Kampi4
29-08-08, 13:08
Ok, werde das mal ausprobieren Baldur.

Aber noch mal zu deinem Z-ADD:
In der Binärzahl steht in Hex X'000000F6', aber nach dem Z-ADD in eine interger hat die einem Wert von "-72160".


@BenderD: ?? Was soll das denn heissen? Was kann ich denn dafür, dass ich von einem Drucklufttester einen Hexadezimalen Wert bekomme und den umrechnen muss? Irgendwie verstehe ich dein Posting nicht.

Mfg KAMPI


P.S. Versuche im Moment auf beiden Wegen irgendwie zur Lösung zu kommen. Also nach dem Weg von Birgitta und E305GL. Bei Birgitta habe ich nur noch das Problem wie ich den Austausch zwischen VARPG (also PC) und As400 hinbekomme.

BenderD
29-08-08, 13:15
wo kommt denn dein ominöser Hexfrickel überhaupt her???




So langsam verzweifel ich. Ich meine, ich will nur zwischen zwei Zahlensystemen umrechnen. Das ist normal eine Befehl und Arbeit von 10 Sekunden!!!!

Mfg KAMPI

Kampi4
29-08-08, 13:29
Zuerst einmal:

Nach Baldurs Hinweis klappt es jetzt. Vielen Dank dafür, aber auch an alle anderen die geholfen haben. Bin euch echt sehr danbar.

@Bender:
Unsere Tochterfirma macht Rad-Reifen Montage und wir programmieren für die. Die haben von der Firma Testo ein Gerät bekommen, das den Druck mist. Kommunikation über RS232 und da bekomme ich halt Hexadezimale Werte zurück. Das gute ist, dass ich Milliampere Werte zurückbekomme und die dann in Bar umrechnen kann ;-)


Mich hat einfach nur geärgert, dass man an einer eigentlich banalen Sache wie das Umrechnen von Zahlensystemen in RPG so einen Aufwand hat.
Im Enteffekt ist es ja "relativ" einfach, aber wenn man nicht weiss wie, ist man da echt geschmissen.


Wünsch euch allen ein schönes Wochenende!!!!

Mfg KAMPI

BenderD
29-08-08, 13:31
bei der Speicher Überlagerung von einem String und einer als Integer definierten Zahl geht die interne Zahlendarstellung (Prozessor abhängig) in die Umrechnung ein, was zu deinem Problem führt.
Dein Drucklufttester muss eine genaue Spezifikation haben, nach der er seine Werte liefert und genau dafür brauchst du eine Umrechnung. Wenn du an den Wert nur Binär oder Hex bekommst, dann bleibt dir in RPG halt nur der Weg über Umrechnung zu Fuss, am Besten in einer SubProcedure eines Serviceprogrammes.
Falls ihr sowas in der Schule nicht gehabt habt, suche ich dir gerne ein Beispiel raus.

mfg

Dieter Bender



@BenderD: ?? Was soll das denn heissen? Was kann ich denn dafür, dass ich von einem Drucklufttester einen Hexadezimalen Wert bekomme und den umrechnen muss? Irgendwie verstehe ich dein Posting nicht.

Mfg KAMPI