# [managed C++] DEC BIN HEX Konverter



## the incredible Leitman (7. November 2006)

Hy Leute...
ich hab da mal ein Problem...(naja... eigentlich sinds mehrere *gg)
und hoffe ihr könnt mir weiterhelfen...

Habe eine Form, mit einem Textfeld, in das der Benutzer die Adresse eines externen Speichers eingeben kann (gewöhnlich in Dec oder Binär)

1) Kann ich der TextBox irgendwie sagen, dass nur Zahlenwerte (oder später dann vielleicht auch Hexadezimalzahlenwerte) erlaubt sind?

2) Kann ich den eingegebenen Wert mit irgendeiner Methode einfach konvertieren, z.b von Hex zu Binär und so weiter? oder muss ich das alles per Hand machen?

Als zusätzliche Informationen würde ich gerne wissen, wie groß in managed C++ 
z.b: int Werte sind? 
Ich kann maximal 8 Bit Pakete weiterleiten, die ich brauche das um eine Schaltung anzusteuern... Jedoch kann eine Adresse größer als 255 (11111111 binär) sein, wodurch ich mehrere 8 Bit Blöcke brauchen würde! wie kann ich einen Wert trennen und in solche Blöcke aufteilen?

Hoffe mir kann irgendjemand helfen, oder zumindest einige Informationen bereitstellen
hab noch nie so LowLevel programmiert ;(
Weiß nicht wo ich anfangen soll

mfG
Leitman


----------



## the incredible Leitman (9. November 2006)

Kann mir echt niemand helfen ?  

Hab absolut keine Ahnung, wie ich das machen soll...

Also Nochmal:

Ich schreibe gerade an einem Programm, dass über eine USB Leitung Daten an eine selbst gebaute Schaltung sendet... diese Schaltung kann jedoch immer nur 8Bit auf einmal verarbeiten, deshalb möchte ich die Daten aufteilen...
DAS ist mein größtes Problem 

Aber vorher treten auch schon einige Problemstellungen auf, die ich nicht lösen kann:
-) Ich möchte die Daten, die ich an meine Schaltung senden möchte, mittels TextBox eingeben... wie kann ich dieser sagen, dass sie nur bestimmte Typen annimmt?


Allgemeine Arbeitsweise:
Benutzer gibt über eine TextBox die Adresse ein, auf der er die Daten speichern möchte

Danach die Daten, welche er auf der Schaltung speichern möchte

so... nun drückt er auf einen SaveKnopf und das Programm nimmt die Daten aus der "Daten_textBox" und speichert sie auf der Schaltung in die Adresse, die in der "Adresse_textBox" steht...

Die Schaltung arbeitet aber nur mit 8Bit, das heißt ich kann Adressen z.B nur mit 00000000 - 11111111 angeben, möchte aber dass der Benutzer auch Decimal oder Ascii Zeichen eingeben kann... Ich könnts ja selber umrechnen, aber ich denke mir das ist sehr aufwendig, gibts da nicht bereits Umrechnungs-Funktionen

Hoffe irgendwer kann mir wenigstens einen Tipp geben...
nur einen kleinen Hinweis, WO ich suchen könnte...
dann such ich mir das alles selber raus, 
aber momentan hab ich nicht einmal einen Anhaltspunkt, wonach ich suchen könnte XD

THX
mfG
Leitman


----------



## deepthroat (10. November 2006)

Hi.

Erstmal mußt du irgendwie eine Unterscheidung haben was der Benutzer eingegeben hat. Also ob das nun eine Binär-, Dezimal- oder Hexadezimalzahl ist. Das könntest du bei hexadezimalen Werten wie üblich an dem Präfix "0x" erkennen. Allerdings mußt du dir noch etwas für binäre Werte ausdenken, da es dafür keine übliche Lösung gibt.

Die binären Werte mußt du auch selbst prüfen und in ein Byte umwandeln (String zu Byte sozusagen).

Für die anderen Werte kannst du einen std::istringstream benutzen und die Werte erstmal in einen unsigned int einlesen, schauen ob sie innerhalb der Grenze liegen und dann mit static_cast in einen unsigned char casten.

Gruß


----------



## the incredible Leitman (10. November 2006)

Danke erstmal 

@Unterscheidung:
Um den Type festzustellen, habe ich 3 Checkboxen erstellt (HEX, DEC und ASCII) von denen  immer eins aktiv sein muss, um zwischen den Typen zu unterscheiden
Anhand von der Stellung dieser CheckBoxen, verarbeite ich dann die eingabe 

Achso, ich kann die werte einfach in binär umwandeln?  
Etwas mit Convert::ToByte oder was?

Und wie kann ich die Eingaben überprüfen?
z.B. ich möchte schaun, ob die Werte eh alle binär Werte sind?
Muss ich den ganzen String durchgehen und nachsehen, ob nur 1 oder null vorkommt?
(bei Dec dann 1-9, HEX 1-F, Ascii ? )

Hast du eventuel ein paar Codesnippets?  
Wär echt toll und würde mir sichr wahnsinnig weiterhelfen


----------



## deepthroat (10. November 2006)

leitman hat gesagt.:


> Und wie kann ich die Eingaben überprüfen?
> z.B. ich möchte schaun, ob die Werte eh alle binär Werte sind?
> Muss ich den ganzen String durchgehen und nachsehen, ob nur 1 oder null vorkommt?
> (bei Dec dann 1-9, HEX 1-F, Ascii ? )


Ja, bei Binärwerten mußt du das so machen, mir ist jedenfalls keine fertige Methode bekannt.

Für hex und dec kannst du wie gesagt einen istringstream nehmen:
	
	
	



```
istringstream is(textfeld.text);
int i;

if (is >> hex >> i && is.get() == EOF) {
  if (i < 255) {
    unsigned char c = static_cast<unsigned char>(i);
    ...
  }
}
```
Gruß


----------

