steinadler Geschrieben 4. April 2006 Geschrieben 4. April 2006 Hallo zusammen, (wie) kann ich in C# einer Variablen einen binären Wert zuweisen? z.B. so: int iIndex = 0110011b Gruß Steinadler
Klotzkopp Geschrieben 4. April 2006 Geschrieben 4. April 2006 Das geht nicht. C# unterstützt nur dezimale und hexadezimale Integerliterale. Wenn es auch mit einerm String als Quelle geht: System.Convert.ToInt32 hat eine Überladung mit String und Zahlensystem. Du könntest aber auch die Zahl im Kopf in Hex umrechnen, das ist ziemlich einfach.
steinadler Geschrieben 4. April 2006 Autor Geschrieben 4. April 2006 schade, dass das nicht geht. Trotzdem Danke
Bubble Geschrieben 4. April 2006 Geschrieben 4. April 2006 Wozu könnte man so etwas brauchen? PS: Man kann es auch leicht verändert selbst umsetzen.
steinadler Geschrieben 4. April 2006 Autor Geschrieben 4. April 2006 Ich habe 12 Buttons. Und mit der Funktion will ich in 12Bit angeben, welcher Button aktiviert werden soll und welcher nicht.
Bubble Geschrieben 4. April 2006 Geschrieben 4. April 2006 Kein Problem. Dazu musst Du aber keine Binärzahlen im Quelltext angeben können. Beispiel: const int Button1 = 1; const int Button2 = 2; const int Button3 = 4; ...usw... int Variable = Button1 + Button3; // Für Button 1 und 3 gesetzt
Honkytonk Geschrieben 4. April 2006 Geschrieben 4. April 2006 Hi, Wüsste zwar spontan auch nicht warum du unbedingt direkt die Binärzahl bräuchtest, aber sei es drum. Dieser Artikel bei Codeproject müsste dir weiterhelfen. Gruß, Honky
steinadler Geschrieben 5. April 2006 Autor Geschrieben 5. April 2006 Also zum Verständnis: Am Ende soll da ne Methode wie diese hier rauskommen. MeineKlasse.ButtonSammlungSetState( 10110011b );
Bubble Geschrieben 5. April 2006 Geschrieben 5. April 2006 Also zum Verständnis: Am Ende soll da ne Methode wie diese hier rauskommen. MeineKlasse.ButtonSammlungSetState( 10110011b ); Das kannst Du mit dem normalen Compiler vergessen. Oder schreib Dir einen eigenen Compiler (bzw. erweitere einen anderen). Aber wo liegt für Dich bitte der Unterschied zu MeineKlasse.ButtonSammlungSetState(256+64+32+4+2); bzw. MeineKlasse.ButtonSammlungSetState(358); ?
steinadler Geschrieben 5. April 2006 Autor Geschrieben 5. April 2006 die Funktion ist für die 12 Funktionstasten und deshalb wollte ich der Reihe nach die Bits für die Tasten setzen... es gibt ja nur zwei zustände. Und in der Methode wollte ich die bits auswerten
Klotzkopp Geschrieben 5. April 2006 Geschrieben 5. April 2006 Aber wenn du sowieso ein Literal angibst, kannst du das doch auch gleich in Dezimal, oder noch einfacher, in Hex umrechnen. Das musst du doch nur ein einziges Mal tun. Das Zahlensystem wirkt sich nur auf Quellcode, Ein- und Ausgabe aus, eben überall dort, wo es auf die Darstellung ankommt. Beim Rechnen ist das egal. Bits kannst du auch mit Dezimalliteralen auswerten.
steinadler Geschrieben 5. April 2006 Autor Geschrieben 5. April 2006 Genau, aber gerade dieses Umrechnen wollte ich umgehen, da das ja im Prinzip 12^2 verschiedene Werte sind
Bubble Geschrieben 5. April 2006 Geschrieben 5. April 2006 aber gerade dieses Umrechnen wollte ich umgehen, da das ja im Prinzip 12^2 verschiedene Werte sind Was Du mit 12^2 meist, solltest Du erläutern. Dir ist aber schon klar, dass man Bits auch einzeln testen kann? 12 Tasten, zwölt Bitpositionen, 12 Zahlen, die Du beliebig addieren oder per binärem "oder" verknüpfen kannst: 2^0 = 1 2^1 = 2 2^2 = 4 2^3 = 8 2^4 = 16 2^5 = 32 2^6 = 64 2^7 = 128 2^8 = 256 2^9 = 512 2^10 = 1024 2^11 = 2048 Da ich Dir diese Trivialität nun aufgeschrieben habe, kannst Du nun das Umrechnen durch bequemes Abschreiben umgehen
Klotzkopp Geschrieben 5. April 2006 Geschrieben 5. April 2006 aber gerade dieses Umrechnen wollte ich umgehen, da das ja im Prinzip 12^2 verschiedene Werte sindEs sind 2^12, also 4096. Aber wolltest du die alle in deinem Quellcode schreiben? Denn nur dafür würdest du Literale brauchen.
steinadler Geschrieben 6. April 2006 Autor Geschrieben 6. April 2006 Ja genau.... war ein Schreibfehler: 2^12 muss das heißen. Ich wollte halt den Aufwand mit dem zusammenrechnen der einzelnen Werte (2, 4, 8 usw.) umgehen. Das lässt sich meiner Meinung nach in Binärschreibweise am einfachsten machen.
Bubble Geschrieben 6. April 2006 Geschrieben 6. April 2006 Ich wollte halt den Aufwand mit dem zusammenrechnen der einzelnen Werte (2, 4, 8 usw.) umgehen. Das lässt sich meiner Meinung nach in Binärschreibweise am einfachsten machen. Bitte nimm es mir nicht übel, aber ich gewinne den Eindruck, dass Du überhaupt keine Ahnung hast. Wenn es Dir im Kopf für vorgegebene Bitkombinationen zu anstrengend ist: Der "+"-Operator existiert. Abgesehen davon wirst Du Dein Bit-Array sicher ohnehin dynamisch zur Laufzeit verändern und verwalten wollen, denn Du wirst ja wohl kaum auf die Idee gekommen sein, alle möglichen Kombinationen von 12 Tasten "fest verdrahtet" vorab zu programmieren. Oder irre ich mich etwa?
steinadler Geschrieben 7. April 2006 Autor Geschrieben 7. April 2006 Aber rein vom Funktionsaufruf in der Entwicklung. ist SetEnabled(0110011111b) nicht viel einfacher, als SetEnabled(2+4+8+16) ???
Klotzkopp Geschrieben 7. April 2006 Geschrieben 7. April 2006 Was meinst du mit "einfacher"? Der Compiler würde - wenn er Dualliterale verarbeiten könnte - aus beidem denselben Code machen. Wenn du mit "einfacher" meinst, dass mit dem Dualliteral einfacher zu erkennen ist, welche Bits gesetzt sind: Du kannst dir auch symbolische Konstanten für die Zweierpotenzen anlegen. Dann kannst du SetEnabled(F1 + F3 + F5 + F6) schreiben. Und ich habe es ja schon erwähnt: Es ist sehr einfach, Dualzahlen im Kopf in Hex umzurechnen. Du kannst je vier Dualziffern zu einer Hexziffer zusammenfassen. Aber eine Frage hast du immer noch nicht beantwortet: Wie viele von diesen Kombinationen willst du eigentlich in deinen Code schreiben, dass dich die Umrechnung so stört?
MarkusLe Geschrieben 7. April 2006 Geschrieben 7. April 2006 Hallo Steinadler, versuchst du vielleicht die Buttons durch eine Art Konfiguration zu setzen, die vorher irgendwo festgelegt wurde? Wenn ja könntest du ja mit einem Klassenobjekt oder mit Flags arbeiten, was mehr Sinn macht als 1100100101 oder ähnliche Konstrukte (Vorallem bei der Lesbarkeit). Ein Beispiel für die Verwendung von Flags [Flags] enum ButtonValues : long //Kannst natürlich auch andere Ganzzahltypen verwenden mit Long kannst du bis zu 64 Buttons ansprechen { NoButton = 0, Button1 = 0x00000001, //Die werte müssen 2er Potenzen sein um jeweils 1 Bit zu setzen. Button2 = 0x00000002, Button3 = 0x00000004, Button4 = 0x00000008, Button5 = 0x00000010 } [sTAThread] static void Main(string[] args) { ButtonValues buttonVals = (ButtonValues.Button1|ButtonValues.Button3); // Hier kanns du beliebig viele Flags mit | verknüpfen Console.WriteLine(((buttonVals & ButtonValues.Button1) == ButtonValues.Button1)?"Button1 Enabled":"Button1 Disabled"); Console.WriteLine(((buttonVals & ButtonValues.Button2) == ButtonValues.Button2)?"Button2 Enabled":"Button2 Disabled"); Console.WriteLine(((buttonVals & ButtonValues.Button3) == ButtonValues.Button3)?"Button3 Enabled":"Button3 Disabled"); Console.ReadLine(); } Hoffe das hilft dir weiter. MfG Markus
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden