Dezimalzahlen aus Speicher ausgeben



  • Folgendes Problem, ich definiere mir einige Variablen vom Typ WORD,
    und schreibe in diese Dezimalzahlen.
    Anschließend schreibe ich die Variablen in den Speicher und lasse mir den Speicher ausgeben.
    Dann brint er mir allerdings ASCII Zeichen.
    Es geht nur Wenn ich die Zahlen in Hochkomma setze '2' das allerdings geht nicht da diese vom Anwender übergeben werden, wie kann ich die dezimal Zahlen normal in den Speicher schreiben und wieder ausgeben? 😕



  • Wie schreibt man Variablen in Dezimalzahlen?
    Was meinst du überhaupt mit Dezimalzahlen? Strings?
    Wie schreibt man Variablen in den Speicher? Ich dachte immer, da liegen die Variablen sowieso schon.
    Wie lässt man sich Speicher ausgeben?
    Wie bringt man "ihn" dazu, etwas zu "bringen"? Wer ist "er" überhaupt?
    Wie kann man Zahlen in Hochkommas setzen?

    Es ist vermutlich besser, wenn du uns den Code zeigst. Aus deiner Beschreibung wird man nicht schlau.



  • Sorry bin noch ein Newbie, jeder fängt mal klein an.

    WORD FC;
    WORD *getArray()
    {
    WORD *Query=new WORD[2];
    return Query;
    }
    
    void init(WORD *array)
    {
    array[0]=LOBYTE(FC);
    array[1]=HIBYTE(FC);
    }
    
    int main();
    {
    WORD *myArray=getArray();
    init(myArray);
    cout<<myArray[0]<<myArray[1]<<endl;
    FC=55;
    }
    

    Ich denke so war der Code jetzt möchte ich als Ausgabe 55 sehen, aber statt dessen sehe ich das ASCII Zeichen was mit 55 codiert ist.



  • Zeig doch bitte den echten Code. Oder wenigesten einen, der sich kompilieren lässt und dessen Verhalten zu deiner Beschreibung passt.



  • int main()//;
    {
    WORD *myArray=getArray();
    FC=55;
    init(myArray);
    cout<<myArray[0]<<myArray[1]<<endl;
    }
    

    Musst FC den Wert 'zur richtigen Zeit' zuweisen.



  • Also, hier noch mal ein compilierbarer Coder der mein Problem zeigt, ich habe zwei Ausgaben drin, die beise das selbe zeigen sollten : 1111 Die erste Ausgabe gibt meine Variable direkt aus, die zweite Ausgabe schreibt meine Variable in einen Buffer(Speicher dafür reserviert) und gibt dann den Inhalt des Buffers aus, wie man dann sieht werden die mit 1111 codierten ASCII Zeichen ausgegeben und nicht 1111. Wie kann ich das umgehen?

    #include <iostream>
    #include <winsock.h>
    #include <windows.h>
    #include <windef.h>
    #include <string>
    #include <stdio.h>
    
    using namespace std;
    
    WORD FC;
    
    byte *getArray()
    {
    byte *Query = new byte[3];
    return Query;
    }
    
    void init(byte *array)
    {
    array[0]=LOBYTE(FC);
    array[1]=HIBYTE(FC);
    }
    
    int main()
    {
    FC=1111;
    cout<<"FC = "<<FC<<endl;
    byte *myArray=getArray();
    init(myArray);
    cout<<"MyArray = "<<myArray[0]<<myArray[1]<<endl;
    delete[] myArray;
    return TRUE;
    }
    


  • indem du kein array vom typ byte benutzt, weil das ein typedef auf char ist, was iostream als buchstaben ausgibt(was ein wunder)



  • Wie gesagt bin noch nicht so sehr fit in dem Thema, vo welchem Typ sollte das Array denn sonst sein?

    Int?



  • short reicht schon

    alternativ umcasten:

    cout<<"MyArray = "<<(int)myArray[0]<<(int)myArray[1]<<endl;
    


  • Hm, jetzt gibt er mir zwar keine Ascii Zeichen mehr aus, aber ach nicht meine 1111 sondern statt dessen 874 Wie kommt das?



  • Es wird 87 und 4 ausgegeben, und das ist auch richtig. 1111 ist 0x457. Das erste Byte ist 0x57 = 87, das zweite ist 4.

    Was hast du erwartet?



  • Mir ist halt noch nicht ganz klar wie das Programm intern mit den Zahlen umgeht. Mal anders gefragt, wenn ich eine hex Zahl im Format 0x0000 in einen Speicher schreiben möchte, und woanders wieder verwenden bzw. ausgeben möchte, wie mach ich das, in meinem Programm geht es um eine Client Server anwendung, wo ich dem Client mitteile welche SPS Adressen er auslesen soll. dazu muss der Awender die Startadresse übergeben in eben hex Format. Der Server muss diese Adresse natürlich lesen könne. Also muss sie im gleichen Format darin stehen bleiben. Wie kann ich dass realisieren 😕 ?



  • Du kannst keine Hex-Zahl "in den Speicher schreiben". Hex und Dezimal und Dual sind Darstellungsarten für den Quellcode oder die Ein- und Ausgabe.

    Ob du nun 255 oder 0xff oder %11111111 oder 0377 schreibst, im Speicher sieht es gleich aus. Solange die Endian-ness von Client und Server gleich ist, gibt es also keine Schwierigkeiten. Daher verstehe ich dein Problem (immer noch) nicht.

    Willst du, dass 1111 ausgegeben wird? Dann musst du nur die Operation mit LOBYTE und HIBYTE rückgängig machen:

    cout<<"MyArray = "<<myArray[0]+myArray[1]*256<<endl;
    


  • Ach so...
    was ist ein EndianNess?



  • endianess ist eine eigenschaft. es gibt Big Endian und Little Endian, diese Eigenschaft beschreibt die lage des höchstwertigen bit, entweder an der stelle 0 ->little End oder an der höchsten Stelle->Big End

    (und wehe ich hab jetzt die beiden begriffe vertauscht^^)



  • Stimmt, hab ich irgendwann schon mal gehört.

    Ok, und jetzt angenommen ich möchte meinen Speicherwert hexadezimal ein und ausgeben, welchen Datentyp muss meine Variale haben der ich die Werte aus dem Speicher übergebe, oder wenn es so einen Datentyp nicht gibt, wie muss ich den Wert umrechnen?

    Ich hoff e ich nerve euch nicht. 😕



  • Du musst den wert nicht umrechen sonder nur richtig ausgebeb!!!
    Datentyp kommt ganz darauf an wieviel du wauslesen willst _w64 zb für 64 bit



  • Ok Der Hex Wert hat max 4 Stellen also max = 0xFFFF Sind 16 Bit oder, und wie gebe ich das jetzt richtig aus?


Anmelden zum Antworten