none
Bit von einem Byte lesen RRS feed

  • Frage

  • Hallo,

    ich habe in einem Label1.Text  den Zustand von 8 bits :  1010 1010 und möchte den Wert von jedem Bit in einer Variable B0......B7 hinterlegen.

    kann mir Jemand helfen, Danke

    Mittwoch, 19. März 2014 19:03

Antworten

  • Hi,

    wenn Du ein etwas hast, was Du in seine Bits zerlegen kannst, schau dir mal BitArray an.

      http://msdn.microsoft.com/de-de/library/system.collections.bitarray.aspx

    Wenn Du nur einen String in der o.g. Form hast (steht da ein Leerzeichen oder war das nur zur besseren Kenntlichmachung?) und wirklich wirklich 8 einzelne Variablen für die Speicherung der Zustände verwenden willst (würde ich nicht machen), dann evtl. so:

    char[] Bits = TextBox1.Text.ToCharArray();
    char B0 = Bits[0];
    char B1 = Bits[1];
    char B2 = Bits[2];
    ...
    

    Aber welchen Sinn sowas haben sollte, kann ich nicht erkennen.

    Wenn Du mit bool anstelle von char für B0 - B7 arbeitest, kannst Du den Wert entweder über Boolean.TryParse umwandeln oder prüfen, ob der Wert "1" or "0" ist und dann B0 ... belegen.

    Evtl. wäre es besser, wenn Du uns verrätst, was Du mit den Daten anstellen willst, ggfs. haben wir dann Alternativvorschläge für dich.




    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert charly67160 Mittwoch, 19. März 2014 21:22
    Mittwoch, 19. März 2014 19:28
    Moderator
  • Hallo,
    bist du dir sicher, dass du 8 verschiedene Variablen haben möchtest? Ein Array ist in vielerlei Hinsicht praktischer zu handhaben.

    Ich würde dir empfehlen zunächst ein Array daraus zu formen. Das geht am einfachsten mit LINQ:

    var array = Label1.Text.ToCharArray()//String in ein Array von einzelnen Zeichen wandeln
                           .Select(x => x == '0' ? false : true)//Für jedes Element entscheiden ob es true (1) oder false (0) ist
                           .ToArray();//Ein Array aus der Liste machen
    Wenn du dann immernoch einzelne Variablen haben willst (ich wüsste nicht wozu) kannst du einfach alle Elemente abfragen und zuweisen:
    bool b0 = array[0];
    bool b1 = array[1];
    bool b2 = array[2];
    //usw.
    PS: Wenn du leerzeichen in dem String hast, dann kannst du diese zuvor entfernen:
    Label1.Text.Replace(" ", "").ToCharArray(...

    PPS: Zur Vollständigkeit mal noch ein Link mit Lösungen wie man ein Bit von einer Byte-Variable bekommt:
    http://stackoverflow.com/questions/4854207/get-a-specific-bit-from-byte
    Das Ganze funktioniert mit allen ganzzahligen Typen (int, uint, long, ...).


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.



    Mittwoch, 19. März 2014 19:30
    Moderator

Alle Antworten

  • Hi,

    wenn Du ein etwas hast, was Du in seine Bits zerlegen kannst, schau dir mal BitArray an.

      http://msdn.microsoft.com/de-de/library/system.collections.bitarray.aspx

    Wenn Du nur einen String in der o.g. Form hast (steht da ein Leerzeichen oder war das nur zur besseren Kenntlichmachung?) und wirklich wirklich 8 einzelne Variablen für die Speicherung der Zustände verwenden willst (würde ich nicht machen), dann evtl. so:

    char[] Bits = TextBox1.Text.ToCharArray();
    char B0 = Bits[0];
    char B1 = Bits[1];
    char B2 = Bits[2];
    ...
    

    Aber welchen Sinn sowas haben sollte, kann ich nicht erkennen.

    Wenn Du mit bool anstelle von char für B0 - B7 arbeitest, kannst Du den Wert entweder über Boolean.TryParse umwandeln oder prüfen, ob der Wert "1" or "0" ist und dann B0 ... belegen.

    Evtl. wäre es besser, wenn Du uns verrätst, was Du mit den Daten anstellen willst, ggfs. haben wir dann Alternativvorschläge für dich.




    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert charly67160 Mittwoch, 19. März 2014 21:22
    Mittwoch, 19. März 2014 19:28
    Moderator
  • Hallo,
    bist du dir sicher, dass du 8 verschiedene Variablen haben möchtest? Ein Array ist in vielerlei Hinsicht praktischer zu handhaben.

    Ich würde dir empfehlen zunächst ein Array daraus zu formen. Das geht am einfachsten mit LINQ:

    var array = Label1.Text.ToCharArray()//String in ein Array von einzelnen Zeichen wandeln
                           .Select(x => x == '0' ? false : true)//Für jedes Element entscheiden ob es true (1) oder false (0) ist
                           .ToArray();//Ein Array aus der Liste machen
    Wenn du dann immernoch einzelne Variablen haben willst (ich wüsste nicht wozu) kannst du einfach alle Elemente abfragen und zuweisen:
    bool b0 = array[0];
    bool b1 = array[1];
    bool b2 = array[2];
    //usw.
    PS: Wenn du leerzeichen in dem String hast, dann kannst du diese zuvor entfernen:
    Label1.Text.Replace(" ", "").ToCharArray(...

    PPS: Zur Vollständigkeit mal noch ein Link mit Lösungen wie man ein Bit von einer Byte-Variable bekommt:
    http://stackoverflow.com/questions/4854207/get-a-specific-bit-from-byte
    Das Ganze funktioniert mit allen ganzzahligen Typen (int, uint, long, ...).


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.



    Mittwoch, 19. März 2014 19:30
    Moderator
  • Salut,

    Ich bin aus Frankreich, mein Deutsch ist nicht so gut.

    ich bekomme von einer SPS  einen String in bynary  Format ( Byte oder Wort), z.Beispiel: 11011001. Es wir den Status eine Pumpe angezeigt.

    wenn bit 5 =1 ist wird eine Pumpe in GRÜN angezeigt

    wenn bit 7 =1 ist wird die Pumpe in ROT angezeigt  

    etc..

    Danke für deine Hilfe

    charly

    Mittwoch, 19. März 2014 19:58
  • Hallo Charly,

    in dem Fall sollten beide Lösungen von Tom und mir (die an für sich das gleiche machen) für dich nutzbar sein.

    Man könnte das zwar auch anders lösen, wenn Du aber eh jede Anzeige mit dem jeweiligen Wert auf rot oder grün umschalten willst, kann man das auch so machen, wie Du es angedacht hast.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Mittwoch, 19. März 2014 20:06
    Moderator