[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2016
    Beiträge
    45

    Binary in fully free ?

    Hallo

    eine kruze Frage, vllt. kenne ja jemand von euch die Lösung!

    Folgende DS ist gegeben
    Code:
         D    dsRcvVar     DS                  qualified
         D  BytesReturn            1      4B 0
         D  #Bytes_Avail           5      8B 0
         D  SplfName               9     18
         D  jobname               19     28
         D  username              29     38
         D  jobnr                 39     44
         D  splfnr                45     48B 0
         D  #Job_SysNam           49     56
         D  #Splf_Dat             57     64
         D  #Reserved             65     65
        D  #Splf_Time            66     71
    Nun möchte ich diese DS in Fully Free übernehmen, aber ich scheitere immer an der Binary Declaration.

    So sieht es bei mir aus:
    Code:
         dcl-ds dsRcvVar qualified;
    
            jobName char(10) pos(19);
    
             userName char(10) pos(29);
    
             jobNr char(6) pos(39);
    
             splfNr bindec(4:0) pos(45);
    
      end-ds; 
    
      
    Ich dachte dies wäre richtig, aber im Programm bekomme ich immer nur eine 0 ausgegeben, obwohl da 82 stehen müsste.

  2. #2
    Registriert seit
    May 2002
    Beiträge
    1.121
    Also für mein Verständnis würde ich das ohne POS machen
    PHP-Code:
    dcl-ds dsRcvVar qualified;
      
    BytesReturn bindec4:);
      
    #Bytes_Avail bindec( 4:0 );
      
    SplfName char10 );
      
    jobname char10 );
      
    username char10 );
      
    jobnr char);
      
    splfnr  bindec4:);
      ..... 
    Gruß Ronald

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Hallo Dominic,
    die Struktur sieht im fully free folgendermaßen aus:

    Code:
    dcl-ds dsRcvVar qualified;
       BytesReturn     bindec(9:0)     pos(1);
       #Bytes_Avail    bindec(9:0)     pos(5);
       SplfName        char(10)        pos(9);
       jobname         char(10)        pos(19);
       username        char(10)        pos(29);
       jobnr           char(6)         pos(39);
       splfnr          bindec(9:0)     pos(45);
       #Job_SysNam     char(8)         pos(49);
       #Splf_Dat       char(8)         pos(57);
       #Reserved       char(1)         pos(65);
       #Splf_Time      char(6)         pos(66);
    end-ds;
    Die bindec Felder müssen 9,0 definiert werden!

    Ich glaube, im fixed Format sind das die Anzahl der Bytes und im free-Format die Anzahl der Stellen.
    Für 9,0 benötigst du 4 Bytes binär. Diese Bytes gibst du im fixed Format an. Theoretisch kann 4 Byte binär noch größere Zahlen als 9,0 darstellen. Aber 9,0 ist der Maximalwert laut Handbuch.

    Dieter

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Besser wäre es, die korrekte Feldtype zu nehmen: INT(2), INT(4), INT(8).
    Ein BINDEC wird intern immer erst von BIN nach DEC und von DEC nach BIN gewandelt incl. Überlaufprüfung, bindec(2) = +/-9999, INT(2) = +-/32767. Bei Zuweisung von 10000 erfolgt ein MCH.
    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

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Besser wäre es, die korrekte Feldtype zu nehmen: INT(2), INT(4), INT(8).
    Ein BINDEC wird intern immer erst von BIN nach DEC und von DEC nach BIN gewandelt incl. Überlaufprüfung, bindec(2) = +/-9999, INT(2) = +-/32767. Bei Zuweisung von 10000 erfolgt ein MCH.
    Du meinst wohl: INT(5) für 2 Byte Integer, INT(10) für 4 Byte Integer und INT(20) für 8 Byte Integer. BinDec(4) deckt den Bereich zwischen -9999 und +9999 während Int(5) den Bereich zwischen -32768 und +32767 abdeckt.
    BinDec(9) deckt den Bereich zwischen -999.999.999 und +999.999.999 ab, während Integer(10) den Bereich zw. ca. -2,1 Mrd und +2,1 Mrd abdeckt,

    In RPG wird die Länge immer als Anzahl Ziffern, die der Maximal-Wert benötigt angegeben.
    BinDec-Werte werden intern in Gepackt-Numerisch konvertiert, während Integer-Werte im Binär-Format sind und bleiben.
    Beim Int-Binär-Firmat kann 1 Byte kann maximal 256 unterschiedliche Zustände einnehmen. Wenn man diese Werte potenziert, kann man die Maximal-Werte leicht berechnen)

    Birgitta
    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Vielen Dank für die Ergänzung und detaillierte Erklärung.
    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 2016
    Beiträge
    45
    Vielen lieben Dank
    Das hilft mir definitiv weiter! Werde das mal umsetzten und mir anschauen.

Similar Threads

  1. Antworten: 6
    Letzter Beitrag: 03-11-17, 09:24
  2. QUSRTVUS 8 binary in Receiver Variablen
    By harkne in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 06-09-17, 14:44
  3. Binary in Packed.
    By dholtmann in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 12-05-17, 14:29
  4. Fully Free und SQLRPGLE
    By dschroeder in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 18-12-15, 12:01
  5. Free-RPG
    By Gimli in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 03-03-03, 10:23

Berechtigungen

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