Dezimalzahlen aus Speicher ausgeben
-
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?