-
Hexzahl in integer umwandeln
Hallo allerseits,
ich bitte um euere Hilfe zu folgendem Thema:
Ich bekomme in VARPG eine Hexzahl. Zum Beispiel "51" oder "A3", etc.
Ich muss diese mit mit normalen Dezimalzahlen vergleichen. Gibt es eine RPG Funktion, die mir hinten die Dezimalzahl ausspuckt, wenn ich vorne die Hexzahl reinschmeisse?
Also HEX = 51 ---> Dezimal = 81 order HEX = A3 ---> Dezimal = 163
Schon mal danke für euro Hilfe!!
Mfg KAMPI
-
Naja, nicht direkt:
D DS
D BIN2 5I 0 inz
D CHAR 1 overlay(BIN2:2)
char = 'A';
if Bin2 = ....
-
Vertan vertan
Wenn du die Zeichenwerte 'A3' hast und nicht den Hexwert, also X'A3', dann musst du die C-Funktion
int sscanf(const char *buffer, const char *format, argument-list);
verwenden.
-
Danke erst mal für die Antworten. Werde das mal probieren.
Mfg KAMPI
-
Zu deiner ersten Antwort noch mal:
Also der Wert steht in nem String, den ich über die Serielle Schnittstelle aus nem Tester auslese (alle Werte sind da dezimal, nur der eine nicht ), und da steht dann nicht nur z.B. "51" sonder "0x51". Ist das dann ne "richtige" Hex Zahl, bei der ich dein erstes Beispiel benutzen kann? Abgesehen davon verstehe ich das noch nicht ganz ...
Mfg KAMPI
-
Das 1. Beispiel ist hierfür korrekt.
Zur Erklärung:
5I 0 = 2-Byte-Binär als Ganzzahl, also X'0000' im Speicher.
Durch das Overlay auf Stelle 2 wird das Zeichen eben Rechtsbündig übertragen und kann dann als Zahl ausgewertet werden.
Zum Vergleich RPG:
I DS
I I B 1 20BIN2
I 2 2 XCHAR
MOVE FELD XCHAR
Z-ADD BIN2 ....
:
-
Ah so, danke für die Erklärung.
Ich habe es in der zwischenzeit selber mit einer Routine gelöst.
Ich splitte meine Zahl (z.B. "51") erst mal auf in "5" und "1". Dann schaue ich nach, ob in den beiden Feldern "ABCDEF" vorkommt. Wenn ja würde ich halt den entsprechenden Dezimalwert reinschreiben.
Dann wird bei diesem Beispiel die "5" *16 genommen und mit der "1" addiert. Dann habe ich meinen Dezimalwert!
Funktioniert und hat nicht lange gedauert es zu programmieren.
Trotzdem noch mal danke für deine Hilfe.
Mfg KAMPI
-
Ganz schön kompliziert, da du ja erst noch von Hex expandieren musst, also aus X'51' eben '51'. Wie löst du das ?
Ansonsten zum Rechnen bietet sich auch eine Tabelle "0123...def' an in der man die Zeichen suchen läßt, der (Index-1) ergibt die Wertigkeit.
Naja, am einfachsten gehts jedoch tatsächlich mit C-Funktionen / MI-API's.
-
Ich weiss, dass der mein Wert in dem großen String, den ich über den Com-Port bekomme, immer an einer bestimmten Stelle Anfängt und 5 Stellen lang ist. Die ersten beiden Stellen sind immer "0x". Dann kommt halt max. dreistellig der Hex-Wert. Also nehme ich mir mit nen Substring einfach die drei Stellen nach den "0x".
Mfg KAMPI
Similar Threads
-
By helion60 in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 08-11-06, 15:48
-
By Murat in forum NEWSboard Drucker
Antworten: 2
Letzter Beitrag: 22-10-06, 12:28
-
By muadeep in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 03-07-06, 09:50
-
By Nickelär in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 02-12-05, 10:18
-
By Kilianski in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 13-01-05, 13:55
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks