[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    54

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    Naja, nicht direkt:

    D DS
    D BIN2 5I 0 inz
    D CHAR 1 overlay(BIN2:2)

    char = 'A';
    if Bin2 = ....
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    54
    Danke erst mal für die Antworten. Werde das mal probieren.

    Mfg KAMPI

  5. #5
    Registriert seit
    Sep 2005
    Beiträge
    54
    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    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 ....
    :
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Sep 2005
    Beiträge
    54
    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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Sep 2005
    Beiträge
    54
    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

  1. Query/400 Dateitypen umwandeln
    By helion60 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 08-11-06, 15:48
  2. IPDS zu PCL umwandeln
    By Murat in forum NEWSboard Drucker
    Antworten: 2
    Letzter Beitrag: 22-10-06, 12:28
  3. O-Bestimmungen in PRTF umwandeln
    By muadeep in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-07-06, 09:50
  4. Query - Text in Wert umwandeln??
    By Nickelär in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 02-12-05, 10:18
  5. Spools 1:1 in *PDF umwandeln
    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
  •