[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2015
    Beiträge
    336

    Hex-Umwandlung

    Hallo zusammen,

    folgende Frage:

    ich habe in einem RPG-Programm ein normales Feld mit z.B. folgendem Inhalt:

    FeldA - Inhalt: 10001011

    In einem FeldB möchte ich diesen Inhalt nun in Hex abspeichern. Wie geht so was ?

    Danke für Infos, Gruß A.

  2. #2
    Registriert seit
    Nov 2020
    Beiträge
    327
    Verstehe ich das richtig, du hast im FeldA einen Binären String den du als Hex String in FeldB haben willst?

  3. #3
    Registriert seit
    Jun 2015
    Beiträge
    336
    Hallo, ja genauso isses !

  4. #4
    Registriert seit
    Jan 2003
    Beiträge
    746
    Wenn's nur diese kleine, einmalige Aufgabe ist: zweimal %SCANRPL

    Falls hinter dieser Frage etwas größeres steht, sollten wir das wissen (EBCDIC/ASCII, Base64 & Co. ;- )

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Nun, ggf. kennt ja jemand noch die Befehle BITON und BITOFF.
    Damit solltest du das doch noch hinbekommen.
    Als Free-Version gibts da %bitor(....).
    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

  6. #6
    Registriert seit
    Jun 2015
    Beiträge
    336
    vielen Dank an alle Helfenden. Werde das auprobieren. Grüße A.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Vielleicht habe ich es noch nicht ganz verstanden, aber das sollte mit der SQL-Funktion INTERPRET gehen. Du musst lediglich den Wert in der Variablen als Binary Hex angeben:

    Code:
    Values(Interpret(BX'10001011' as Integer));
    Im RPG könnte die Konvertierung dann wie folgt aussehen:

    Code:
      DCL-S  BinVar     Char(8)   inz('10001011');                            
                                                                              
      DCL-S  CmdSQL   VarChar(256);                                           
      DCL-S  Value   Int(10);                                                 
    //*********************************************************************                                         
       CmdSQL = 'Values(Interpret(BX''' + BinVar + ''' as Integer)) +         
                           into ?';                                           
       Exec SQL Prepare DynSQL from  :CmdSQL;                                 
       Exec SQL Execute DynSQL Using :Value;                                  
       Dsply Value;                                                           
                                                                              
     Return;
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Jun 2015
    Beiträge
    336
    lieben Dank für die Hilfe !! Grüße A.

  9. #9
    Registriert seit
    Jun 2015
    Beiträge
    336
    Hallo nochmals, also BIN => HEX funktioniert einwandfrei. Umgekehrt ginge das dann auch ?

    Also dann HEX => BIN

    LG

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Versuch mal ob Du mit der SQL-Funktion HEX das gewünschte Ergebnis bekommst:

    Code:
    Values(Cast(Hex(Integer(256)) as Char(50)));
    Oder im RPG
    Code:
      DCL-S  Value    Int(10);               
      DCL-S  Text     Char(50);              
                                             
       Value = 256;                          
       Exec SQL Set :Text = Hex(:Value);     
       Dsply Text;
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  11. #11
    Registriert seit
    Jun 2015
    Beiträge
    336
    Hallo und vielen lieben Dank für die Hilfe. Ich probiere das mal aus und melde mich nochmals. Das erste RPG hat TOP !!! geklappt. Danke.

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    HEX liefert leider nur '00' bis 'FF' und nicht binär.
    Du kannst aber eine Tabelle "bits" mit den Hexwerten
    x'01', x'02', x'04', ... x'80'
    erstellen.

    Dann
    dcl-s fromChar char(1);
    dcl-s binvalue varchar(8) inz;
    dcl-s index bin(5);

    for index = 1 to 8;
    if %bitand(fromChar:bits(index)) > x'00';
    binvalue += '1';
    else;
    binvalue += '0';
    next;

    Darüber kann man auch eine Funktion schreiben.
    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

Similar Threads

  1. Antworten: 4
    Letzter Beitrag: 25-02-21, 12:22
  2. Umwandlung mit RPGPPOPT(*LVL2)
    By KM in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 18-05-17, 07:55
  3. SQL0312 bei Umwandlung von SQLRPGLE mit Variablen
    By msost in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 02-03-16, 17:39
  4. V7R1 Fehler Umwandlung SQLRPGLE
    By Peet in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 29-10-14, 07:54
  5. FTP AS400 zu PC, Probleme mit Umwandlung numerischer Felder
    By uweulmer in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 08-01-01, 13:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •