Laden...

Byte Array mit Binaär Codierter Zahl als String

Erstellt von steff911 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.171 Views
S
steff911 Themenstarter:in
26 Beiträge seit 2009
vor 14 Jahren
Byte Array mit Binaär Codierter Zahl als String

Habe in einem Array eine Zahl binärcodiert abgebildet.

Jetzt möchte ich diese Zahl zurück in einen String bekommen.

Mit folgendem Code


            System.Text.Encoding enc = System.Text.Encoding.ASCII;
            string myString = enc.GetString(binOut01);

bekomme ich in meinem String
"\0\0\0\0\0\0\0"

Das Array sieht so aus

binOut01[0]=0
binOut01[1]=1
binOut01[2]=0
binOut01[3]=0
binOut01[4]=0
binOut01[5]=0
binOut01[6]=0
binOut01[7]=0

Als Ergebnis müsste ja 2 rauskommen

M
1.439 Beiträge seit 2005
vor 14 Jahren

for (int i = 0; i < binOut01.Length; i++) {
    binOut01[i] += '0';
}
string myString = enc.GetString(binOut01);

R
164 Beiträge seit 2008
vor 14 Jahren

Die GetString-Methode wandelt jedes Byte des angegebenen Arrays in ein Zeichen um.

Es entstehen also aus deinem Array 8 Zeichen, die den Wert 0 oder 1 haben. Zum Umwandeln der Bitfolge in ein Zeichen müssen die Bits zuerst in Bytes umgewandelt werden. Dass kann man mit den Shift-Operatoren und logischen Verknüpfungen machen.
Diese Vorgehensweise ist aber sinnlos, denn die Daten müssen normalerweise nie in einem Bitarray abgebildet werden.
Was willst du erreichen oder programmieren?

PS: Mein Beitrag Nummer [1111111]2.

S
steff911 Themenstarter:in
26 Beiträge seit 2009
vor 14 Jahren

Vielleicht gehe ich ja auch den total verkehrten Weg.

Bekomme von einem XML Server eine Zahl mitgeteilt. Diese Zahl gibt Binärcodiert den Zustand von Ausgangssignalen wieder.

Wenn ich also die Zahl 2 mitgeteilt bekomme, dann ist der erste Ausgang "low" der Zweite "high" der Dritte "low" der Vierte "low" und so weiter.

01000000

Damit ich jetzt jeden Ausgangszustand auf der GUI anzeigen kann, hab ich diese Zahl in ein Byte Array geschrieben, indem ich den Zustand 0 oder 1 für jeden Ausgang abfragen kann.

Das ganze soll auch Rückwärts funktionieren.
Das heißt, wenn ich den entsprechenden Button des Ausgangs drücke, wird das entsprechende Bit in dem Byte Array geändert.

Und nu muss ich wieder die Zahl an den XML Server senden. Wenn ich nun noch den 3. Ausgang "high" haben möchte, muss ich die Zahl 6 an den Server senden

01100000

M
194 Beiträge seit 2008
vor 14 Jahren

Ungetestet:


int iResult=0;
for (int i=0; i<binOut01.Length; i++)
{
    if (binOut01[i]) iResult += (int)Math.Pow(2, i);
}
string sRetVal = iResult.ToString();

"Indem Sie über dieses ernste Thema lachen disqualifizieren Sie sich selbst."
mrleeh.de

R
164 Beiträge seit 2008
vor 14 Jahren

Der Xml-Server ist nicht sehr schlau. Er könnte doch gleich die richtigen Zahlen angeben.
Im dem Fall ist es sinnvoll, ein Array zu erstellen. Aber nimm lieber die BitArray-Klasse oder ein bool[]-Array, das spart Speicherplatz im Vergleich zu deinem Array. Mit der BitArray-Klasse kann man auch logische Funktionen wie AND, OR, XOR ausführen.
Hier sind einige Möglichkeiten beschrieben, wie man Bits in ein Byte umrechnen kann.

  
byte ConvertToByte(BitArray bits)  
{  
    if (bits.Count != 8)  
    {  
        throw new ArgumentException("bits");  
    }  
    byte[] bytes = new byte[1];  
    bits.CopyTo(bytes, 0);  
    return bytes[0];  
}  
  

Die Methode von MrLeeh müsste auch funktionieren.

S
steff911 Themenstarter:in
26 Beiträge seit 2009
vor 14 Jahren

Hm, hab ich leider nicht gecheckt.

Leider hab ich den XML Server nicht geschrieben. Das einzigste was ich machen kann ist, mir jedes einzelne Bit übergeben zu lassen. Das ist aber viel Tiparbeit und auch beschränkt.

Gibts noch ne andere Lösung?