Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

C++ 2010 Express Form: Anzeige von Hex Zahlen in Textbox

Sigi Saudi / 14 Antworten / Baumansicht Nickles

Hallo Gemeinde,

Ich hatte vor einigen Jahrzehnten mit Borland C++ programmiert und fand nun heraus, dass Microsoft C++ 2010 Express kostenlos abgibt. Ich hatte mir die Anwendung heruntergeladen und installiert. (Kaufen lohnt nicht, weil ich dafuer zu wenig programmiere).

Ich befasse mich mit der Lyrik Synchronisierung von MIDI Karaoke Dateien und fuege dort unter anderem an Stellen, wo es erforderlich ist, Texte wie "(instrumental)" usw. ein. Die Synchronisierung habe ich bisher immer "zu Fuss" gemacht, was in jedem Einzelfall eine fuerchterliche bitweise Rechnerei ist. Mit C++ habe ich mir eine Console-App geschrieben, die mir die Arbeit abnimmt. Die App funktioniert einwandfrei.

Nun versuchte ich, diese App in eine C++ 2010 Form zu programmieren. Die Rechnerei, z. B. mit dem bitweisen Verschieben von unsigned int Inhalten funktioniert. Das Problem ist nur die Ein- und Ausgabe, die hexadezimal erfolgen muss. Ich habe lange im Internet recherchiert, habe aber keine Methode gefunden, wie ich mit Textboxen Hex-Ein- Ausgaben machen kann. Wenn ich eine Hex-Zahl in den erforderlichen Ausgabestring fuer eine Textbox umwandle, wird das Dezimalaequivalent der Zahl angezeigt..

Weiss jemand einen Rat, wie man mit C++ 2010 Express in Textboxen auf Forms Hexadezimalzahlen ausgeben kann?

Vielen Dank und Gruss aus dem damned too hot Thailand

Sigi Saudi .

Gruesse aus Wang Nam Kiaw / Thailand
bei Antwort benachrichtigen
Borlander Sigi Saudi „C++ 2010 Express Form: Anzeige von Hex Zahlen in Textbox“
Optionen
unsigned int […] Ein- und Ausgabe, die hexadezimal erfolgen muss. […] keine Methode gefunden, wie ich mit Textboxen Hex-Ein- Ausgaben machen kann. Wenn ich eine Hex-Zahl in den erforderlichen Ausgabestring fuer eine Textbox umwandle, wird das Dezimalaequivalent der Zahl angezeigt..

Wenn Du ein unsigned int verwendest würde mich alles andere auch nur wundern.

Du hast einen (im Binärsystem abgebildeten) Ganzzahlwert und der wird von Haus aus nun einmal in einer dezimalen Repräsentation abgebildet beim Konvertieren von und zu Strings.

In Java gibt es die Erstellung einer hexadezimalen Repräsentation die Methode

Integer#toHexString(int)

und zur Umwandlung zurück

Integer#parseInt(String, 16)

was ähnliches solltest Du auch in Deiner Umgebung bekommen, oder könntest es notfalls auch selbst programmieren ;-)

bei Antwort benachrichtigen
Sigi Saudi Borlander „Wenn Du ein unsigned int verwendest würde mich alles andere auch nur wundern. Du hast einen im Binärsystem abgebildeten ...“
Optionen

Hallo Borlander,

Schoen, mal wieder von Dir zu hoeren.

Das Problem ist, wie so oft, Microsoft. Ich habe mir alle Methoden in MSN-Veroeffentlichungen angesehen, aber es laeuft immer darauf hinaus, das eine Textbox nur Zahlenwerte zur Basis 10 anzeigt.Zumindest werden nur fuer diese Anwendungen Formatkonverter angeboten.

Wenn auch nur ein Buchstabe in dem Ein- oder Ausgabestring ist, gibt es die Fehlermeldung: 

System.FormatException: Input string was not in a correct format."

Es scheint so, dass ich mich mit einer Console Ein-/Ausgabe zufrieden geben muss. Ich habe den Command Prompt dafuer besonders geshaped, dass er nicht nur mit dem langweiligen Hintergrund schwarz und der zu kleinen weissen Schrift erscheint. Ich habe dazu die Default- Werte geaendert, so dass ich nicht jedes mal bei Gebrauch neu einstellen muss. Der Nachteil einer solchen Command Prompt Anwendung ist aber, dass man sie vor jedem Gebrauch neu zu starten hat (Doppelklick auf die .exe Datei), da man sie nach Beendigung eines jeden Laufs schliessen muss. 

Gruss
Sigi Saudi

(In Thailand gibt es 3 Jahreszeiten: hot, damned hot und damned too hot.
Wir sind gerade in der 3. Jahreszeit.)

Gruesse aus Wang Nam Kiaw / Thailand
bei Antwort benachrichtigen
Greif 72 Sigi Saudi „Hallo Borlander, Schoen, mal wieder von Dir zu hoeren. Das Problem ist, wie so oft, Microsoft. Ich habe mir alle Methoden ...“
Optionen

Hi Sigi,

hier bei mir war der Sommer eher kühl, und die Temperatur überstieg fast nie 32°C. Zusätzlich fast täglich kleinere Gewitter. Also für Thailand war dieses Jahr bisher eher extrem kalt und konnte selbst von Europäern nur mit phad lOm gut ertragen werden!

Gruss

Hartmut

Rei bonae tempus est et air, quis ex abdomine oritur, sagitta non est!
bei Antwort benachrichtigen
Sigi Saudi Greif 72 „Hi Sigi, hier bei mir war der Sommer eher kühl, und die Temperatur überstieg fast nie 32 C. Zusätzlich fast täglich ...“
Optionen

Hallo Hartmut,

In der Naehe von Nakorn Ratchasima (Khorat) in Wang Nam Kiaw und in Bangkok, wo ich z. Z. gerade bin, waren die Temperaturen hoeher.

Wir hatten gestern in Bangkok Minburi 35 Grad. in Wang Nam Kiaw sind wir dieses Jahr schon bis 38 Grad gekommen. Wenn der Monsun mit Gewittern zuschlaegt, kuehlt es natuerlich ab, aber wenn dann wieder die Sonne scheint, klettert das Thermometer gleich wieder ueber die 30-Grad-Marke. Das ist nicht das schlimmste, aber die Natur in Wang Nam Kiaw beginnt dann zu dampfen und die Luftfeuchtigkeit steigt enorm an, manchmal bis in die Naehe von 100%. Das macht dann aus gemessenen 34 Grad gefuehlte 40 Grad.

Ich habe 14 Jahre in Riad/Saudi Arabien gearbeitet, ich kenne Temperaturen bis 53 Grad im Schatten. Das hat mir aber auch nichts ausgemacht, es gibt ja Duschen. In Saudi Arabien ist die Luftfeuchtigkeit bei den Temperaturen unter 10%. Das ist angenehmer. Ich bin in der Zeit fast jeden Sonntag zu Fuss in der Wueste unterwegs gewesen und habe alte Camel Trails erkundet, allerdings in Saudi Tracht, die fuer die Wueste viel besser geeignet ist als die Western Kleidung.
Gruss

Sigi Saudi

Gruesse aus Wang Nam Kiaw / Thailand
bei Antwort benachrichtigen
Greif 72 Sigi Saudi „Hallo Hartmut, In der Naehe von Nakorn Ratchasima Khorat in Wang Nam Kiaw und in Bangkok, wo ich z. Z. gerade bin, waren ...“
Optionen

Hallo Sigi,

ich befinde mich in der nördlich von Dir gelegenen Provinz Chaiyaphum, wo das Wetter etwa gleich sein sollte. Temperaturen von bis zu 40°C sind hier im Frühjahr und Herbst ziemlich normal und werden des Öfteren erreicht.

Bangkok, oder besser gesagt "gung theep" ist halt ein modderiges Schlammloch und wird auch deshalb von den Einheimischen so genannt! Daher ist das Klima dort eher ganzjährig nicht zu ertragen, allein wegen der dort immer hohen Luftfeuchtigkeit und den generell höheren Temperaturen als im Umland.

Hier in der Nähe von Phu Kiao habe ich jetzt ca. 60% Luftfeuchte bei 31°C, und das sind Werte die auch in Deutschland eher als angenehm angesehen werden sollten. Das Dampfen nach den Regengüssen ist hier überall ganz normal, da der Erdboden hier nicht -wie in Deutschland- über Nacht abgekühlt wird. Nichttropische Nachttemperaturen erreicht man nur ein paar Mal im Winter.Zwinkernd

Gruss

Hartmut

Rei bonae tempus est et air, quis ex abdomine oritur, sagitta non est!
bei Antwort benachrichtigen
Sigi Saudi Greif 72 „Hallo Sigi, ich befinde mich in der nördlich von Dir gelegenen Provinz Chaiyaphum, wo das Wetter etwa gleich sein sollte. ...“
Optionen

Hallo Hartmut,

Da muss ich Dir widersprechen. Grung Thep (wie die Schreibweise von Bangkok aus der Landessprache uebersetzt richtiger ist), heist "Stadt der Engel". Grung = Stadt, Thep = Engel). der vollstaendige Name in thailaendischjer Sprache von Bangkok geht noch ungefaehr 30 Woerter weiter. Das naechste Wort waere Mahanakorn, was grosse Stadt bedeutet. Die Thais sagen meistens respektvoll "Grung Thep Mahanakorn", wenn sie Bangkok ansprechen.

Du verwechselst das mit Kuala Lumpur, der Hauptstadt von Malaisia. Kuala Lumpur heist uebersetzt "Schlammiger Zusammenfluss", weil dort 2 Fluesse zusammenfliessen und der Zusammenfluss frueher sehr schlammig war. Heute liegt der Zusammenfluss unter Beton, wie ich im vergangenen Jahr festgestellt habe, als ich Kuala Lumpur besuchte.

Bangkok ist auch keineswegs ein "moddriges Schlammloch". Die Stadt ist -urspruenglich mal wegen der besseren Verteidigungsmoeglichkeiten gegen die Burmesen- auf schlammigem Grund gebaut, aber durch die vielen Klongs (Kanaele) in der Stadt ist Bangkok mittlerweile komplett drainiert und aus den ehemals schlammigen Grund ist fester Boden geworden. 

Ich arbeitete in den 80-er und 90-er Jahren mehr als 6 Jahre in Bangkok und lebe dort auch jetzt noch von Zeit zu Zeit in meinem Haus in Minburi. Ich habe das Klima immer gut vertragen und -Bangkok ist eine aufregende Stadt. 

Gruss
Siegfried

Gruesse aus Wang Nam Kiaw / Thailand
bei Antwort benachrichtigen
Greif 72 Sigi Saudi „Hallo Hartmut, Da muss ich Dir widersprechen. Grung Thep wie die Schreibweise von Bangkok aus der Landessprache uebersetzt ...“
Optionen

Hi Sigi,

Du hast natürlich recht und meine Verballhornung der Sprache sollte besser immer vor den respektvollen Thais verborgen bleiben. Trifft aber klimatisch auf die sonst schon imposante und interessante Hauptstadt zu. Man sucht da immer am besten klimatisierte Räume auf, und Wanderungen wie in Europa oder Arabien empfehlen sich eher nicht.

Ich war erst Mitte der 90er Jahre das erste Mal in Thailand und Bangkok. Seitdem aber immer häufiger zu Inbetriebnahmen und gerade das Wetter in Bangkok war immer heißer und mit höherer Luftfeuchtigkeit belastet als später die einzelnen Einsatzgebiete.

Mich selber haben dieses Jahr eher die ständigen Gewitter gestört, die die Benutzung des Schwimmteichs verhinderten. Bin da halt sehr vorsichtig und möchte die gleichzeitige Anwesenheit von Blitz und mir im Wasser vermeiden.Zwinkernd

Gruss

Hartmut 

Rei bonae tempus est et air, quis ex abdomine oritur, sagitta non est!
bei Antwort benachrichtigen
Borlander Sigi Saudi „Hallo Borlander, Schoen, mal wieder von Dir zu hoeren. Das Problem ist, wie so oft, Microsoft. Ich habe mir alle Methoden ...“
Optionen
aber es laeuft immer darauf hinaus, das eine Textbox nur Zahlenwerte zur Basis 10 anzeigt.Zumindest werden nur fuer diese Anwendungen Formatkonverter angeboten.

Ok. Du hast also versucht die Textbox so zu konfigurieren, dass sie nur Zahlen anzeigt? Für Hex-Darstellung wirst Du Dich am einfachsten auf das zurückbesinnen was die Textbox auch kann: Text aus- und eingeben. Das ist vom Ergebnis mindestens genau so gut wie eine Konsolenanwendung ;-)

Ich versuche mal in Pseudecode darzustellen was Du machen müsstest:

// textfeld mit Wert füllen
textbox.text := convertUIntToHexString(wert)

// wert auslesen
eingabe := textbox.text
if (isHexString(eingabe)) {
  wert := convertHexStringToUInt(eingabe)
} else {
  // fehlerbehandlung
}

Evtl. kannst Du auch eigene FilterMaske für die TextBox festlegen (bzw. kannst eine Komponente nutzen die eine solche Eigenschaft mitbringt) und mit dieser dann die Eingabe auf die Zeichen 0-9 und a-f einschränken. (Passende Regex falls unterstützt wäre hier "[0-9a-f]+")

bei Antwort benachrichtigen
Sigi Saudi Borlander „Ok. Du hast also versucht die Textbox so zu konfigurieren, dass sie nur Zahlen anzeigt? Für Hex-Darstellung wirst Du Dich ...“
Optionen

Hallo Borlander;

Vielen Dank fuer Deine Antwort.

Ich habe mal versucht, die Instruktion fuer "Textfeld mit Wert fuellen" formatgerecht in meine Routine einzubauen. Dazu zuerst meine funktionierende int Ausgabe:

tbTempC->Text = Convert::ToString(temp); // wobei temp eine int-Zahl ist.

Deinen modifizierten Vorschlag habe ich wie folgt eingesetzt:

Line 150
tbTempC->Text = ConvertUInt::ToHexString(hexint);
wobei tbTempC der Name der Textbox ist und temp ein bitweiser int Hexwert:

unsigned int hexint = 127; der 0x7F entspricht. 

Der Compiler gibt mir dann folgende Errormeldungen aus:

1>c:\users\siegfried\documents\visual studio 2010\projects\ftoc\ftoc\Form1.h(150): error C2653: 'ConvertUInt': Keine Klasse oder Namespace

1>c:\users\siegfried\documents\visual studio 2010\projects\ftoc\ftoc\Form1.h(150): error C3861: "ToHexString": Bezeichner wurde nicht gefunden.

WSenn ich im Internet die Convert Methoden recherchiere, stosse ich z. B. auf die msn Seite https://msdn.microsoft.com/de-de/library/system.convert.tostring(v=vs.110).aspx

Da findet man nichts ueber Hex Zahlen, so dass ich annehme, dass das nicht vorgesehen ist.

Gruss

Sigi Saudi

Gruesse aus Wang Nam Kiaw / Thailand
bei Antwort benachrichtigen
Borlander Sigi Saudi „Hallo Borlander Vielen Dank fuer Deine Antwort. Ich habe mal versucht, die Instruktion fuer Textfeld mit Wert fuellen ...“
Optionen
WSenn ich im Internet die Convert Methoden recherchiere, stosse ich z. B. auf die msn Seite https://msdn.microsoft.com/de-de/library/system.convert.tostring(v=vs.110).aspx Da findet man nichts ueber Hex Zahlen, so dass ich annehme, dass das nicht vorgesehen ist.

Doch:

ToString(Int32, Int32)

Konvertiert den Wert einer 32-Bit-Ganzzahl mit Vorzeichen in die entsprechende Zeichenfolgendarstellung in einer angegebenen Basis.

Mit dem Paramter toBase = 16 bekommst Du da einen HexString raus.

Verwendest Du denn tatsächlich auch das .NET Framework? Dann hätte ich doch eher den Einsatz von C# erwartet.

bei Antwort benachrichtigen
Sigi Saudi Borlander „Doch: Mit dem Paramter toBase 16 bekommst Du da einen HexString raus. Verwendest Du denn tatsächlich auch das .NET ...“
Optionen

Hallo Borlander,

Nach einigen Irrwegen habe ich es mit Deinen Hinweisen nun hinbekommen, eine int-Zahl als Hex Zahl auszugeben. Der Code in C++ 2010 Express ist

int hexint = 127;

int toBase = 16;

tbTempC->Text = Convert::ToString(hexint, toBase);

wobei tbTempC die Ausgabe-Textbox in der Form ist. die Zahl hexint = 127 wurde als 7f ausgegeben.

Nun muss ich mich noch mit dem Input als Hexzahl beschaeftigen und damit, wie ich Hexwerte mit Grossbuchstaben anzeigen kann. Oder weisst Du eine Methode?

Das Net-Framwork verwende ich nicht, auch nicht C#, sondern C++ 2010, das Microsoft mit Freischaltcode kostenlos abgibt. Ich programmiere eher selten, nur, um laestige, wiederkehrende Rechenroutinen in Anwendungen zu giessen und da lohnt sich fuer mich der Kauf von C# nicht.

Z. Z. hatte ich gerade das Problem, dass ich mit meinem Hex Editor in Karaoke-Midi Dateien zusaetzliche Texte einbringen wollte, wie z. B. (instrumental), wenn instrumental-Solos ohne Text gespielt werden. Dazu muss man den Zeitversatz, der das Solospiel in der Text-Musik Synchronisation repraesentiert, auf die einzelnen Buchstaben des einzufuegenden Worts aufteilen. Weil der Zeitversatz hexadezimal und zusaetzlich codiert ist, muss man zur Ermittlung des Dezimalwertes die Bits eines jeden Bytes des Versatzes hin- und herschieben, einzelne Bits herausunden, teilen durch die Anzahl der Zeichen, neu kodieren durch Verschiebung und bits hereinodern und dann am Ende hexadezimal neu ausgeben. Das laesst sich zu Fuss machen, geht aber mit einer Anwendung viel einfacher. Die Console Anwendung funktioniert schon, aber nun moechte ich das ganze wegen der besseren Handhabung als C++ Windows Form programmieren.

Das ist der Hintergrund.

Gruss

Siegfried

Gruesse aus Wang Nam Kiaw / Thailand
bei Antwort benachrichtigen
Borlander Sigi Saudi „Hallo Borlander, Nach einigen Irrwegen habe ich es mit Deinen Hinweisen nun hinbekommen, eine int-Zahl als Hex Zahl ...“
Optionen
Nun muss ich mich noch mit dem Input als Hexzahl beschaeftigen und damit, wie ich Hexwerte mit Grossbuchstaben anzeigen kann. Oder weisst Du eine Methode?

Such mal nach einer Uppercase-Funktion zum Umwandeln von Strings. Mit der dann kannst Du dann das Ergebnis von Convert::ToString(hexint, toBase) in Großbuchstaben mit umwandeln.

bei Antwort benachrichtigen
Sigi Saudi Borlander „Such mal nach einer Uppercase-Funktion zum Umwandeln von Strings. Mit der dann kannst Du dann das Ergebnis von ...“
Optionen

Danke Borlander, hab ich schon gefunden. Ich kann jetzt hex-Ein- und Ausgaben in Grossbuchstaben machen. Die Instruktion ist wie folgt:

tbTempF->CharacterCasing = CharacterCasing::Upper;

Wobei tbTempF der Name der Textbox ist, die Uppercase anzeigen soll.

Alles funktioniert. Fuer die Input Box muss ich nur noch die Eingabelimitierung auf 123456789ABCDEF finden, sonst ist alles klar.

Herzlichen Dank fuer Deine Hilfe.

Gruss

Sigi Saudi

Gruesse aus Wang Nam Kiaw / Thailand
bei Antwort benachrichtigen
Borlander Sigi Saudi „Danke Borlander, hab ich schon gefunden. Ich kann jetzt hex-Ein- und Ausgaben in Grossbuchstaben machen. Die Instruktion ...“
Optionen

Schön zu hören, dass ich Dir da weiterhelfen konnte.

Fuer die Input Box muss ich nur noch die Eingabelimitierung auf 123456789ABCDEF finden, sonst ist alles klar.

Ich würde bei der Eingabe aber auf jeden Fall auch Kleinbuchstaben erlauben. Ansonsten machst Du dem Benutzer das Leben unnötig schwer.

bei Antwort benachrichtigen