Forum: PC-Programmierung C# String in 8er blöcke unterteilen und in byte array einordnen


von Sebastian N. (sebastian_neusch)


Lesenswert?

Hallo,

ich will einen string der aus binären 8bit-Blöcken in einer Ketter 
besteht,
und den will ich nun pber die Funktion Convert.ToByte("01001101", 2)
in ein byte[] array einordnen:
Im String bin steht die reihe der binären blöcke,
z und y sind zählvariablen:
Mein Code:
1
for (int i = 0; i < bin.Length; )
2
            {
3
                temp = ""; 
4
                for (int z = i; z < 8; z++)
5
                {
6
                    temp += bin[z];
7
                }
8
                encr[y] = Convert.ToByte(temp, 2);
9
                i = i + 8;
10
                y++;
11
            }

Danke im Vorraus

sebastian

von Timo B. (shortcircuit)


Lesenswert?

Hey ich weiß jetzt zwar nicht wo das Problem liegt. Das müsste 
eigentlich Funktionieren. Du kannst das ganze aber auch so probieren:
1
  private byte[] ConvertVersion1(string bin)
2
    {
3
      if (bin.Length % 8 != 0) return null;    // Fehlerprüfung ob string gültige Länge hat
4
5
      List<byte> converted = new List<byte>();
6
7
      for (int pos = 0; pos < bin.Length; pos+= 8)
8
      {
9
        byte val = 0;
10
11
        for (int bit = 0; bit < 8; bit++)
12
          if (bin[pos + bit] == '1') val |= (byte)(1 << bit);    // Bitweises OR um entsprechende Bits in 'val' zu setzen
13
14
        converted.Add(val);
15
      }
16
17
      return converted.ToArray();
18
    }
19
20
    private byte[] ConvertVersion2(string bin)
21
    {
22
      if (bin.Length % 8 != 0) return null;    // Fehlerprüfung ob string gültige Länge hat
23
24
      List<byte> converted = new List<byte>();
25
26
      for (int pos = 0; pos < bin.Length; pos += 8)
27
      {
28
        string s = bin.Substring(pos, 8);     // String splitten und 8er Block auslesen
29
        converted.Add(Convert.ToByte(s, 2));
30
      }
31
32
      return converted.ToArray();
33
    }
Die sollten beide funktionieren. Hab sie jetzt nicht extra getestet.

P.S.: Für die 2. Version brauchste Linq. Des gibts glaub ich erst ab 
.Net 4.0

von Sebastian N. (sebastian_neusch)


Lesenswert?

Ich habe das problem das mein binarer code nicht immer 8 zeichen, weil 
in einer funktion kit integer garbeitet wird und dann bei. Den codes die 
eine 0 vorne hatten, die 0fehlt und. Dann habe ich nur noch 7 chars im 
string

von Uhu U. (uhu)


Lesenswert?

Sebastian N. schrieb:
> Ich habe das problem das mein binarer code nicht immer 8 zeichen, weil
> in einer funktion kit integer garbeitet wird und dann bei. Den codes die
> eine 0 vorne hatten, die 0fehlt und. Dann habe ich nur noch 7 chars im
> string

Und den Rest frißt deine Tastatur - oder wie erklärt man sich dieses 
Gestammel?

von Timo B. (shortcircuit)


Lesenswert?

Englisch + Googleübersetzer = das da ??? Ich verstehe den Text nicht 
richtig :D. Kann es sein dass du ein Problem mit dem 
Stringabschlusszeichen '\0' hast?

von egbert (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Sebastian N. schrieb:
>> Ich habe das problem das mein binarer code nicht immer 8 zeichen, weil
>> in einer funktion kit integer garbeitet wird und dann bei. Den codes die
>> eine 0 vorne hatten, die 0fehlt und. Dann habe ich nur noch 7 chars im
>> string
>
> Und den Rest frißt deine Tastatur - oder wie erklärt man sich dieses
> Gestammel?

Ach was, Rechtschreibung und verständliche Ausdrucksweise ist heutzutage 
überbewertet.

Es wird Zeit, das die Kompiler endlich benutzerfreundlicher werden und 
sich nicht mit Schweizer Präzision an syntaktische Regeln halten.

Sowas wie "kann ich Bitfolge?" oder "mach zahl" sollte zu einem 
funktionsfähigen Ergebnis führen, andernfalls aus unserer jungen Elite 
sonst wohl keine Programmierer mehr hervorgehen...

Schönes WE

von Sebastian N. (sebastian_neusch)


Lesenswert?

Entschuldigung, ich war gerade über das handy im forum.

Und fur meine Rechtschreibung interessiert mehr leute wie mein 
eigentliches problem

von Uhu U. (uhu)


Lesenswert?

Sebastian N. schrieb:
> Und fur meine Rechtschreibung interessiert mehr leute wie mein
> eigentliches problem

Das ist ein Irrtum. Schlimmer, als die Rechtschreibung ist das 
Gestammel, das einfach nur unverständlich ist.

Das mag bei Smalltalk noch angehen, bei Programmierproblemen nicht.

von Sebastian N. (sebastian_neusch)


Lesenswert?

Uhu Uhuhu schrieb:
> Sebastian N. schrieb:
>> Und fur meine Rechtschreibung interessiert mehr leute wie mein
>> eigentliches problem
>
> Das ist ein Irrtum. Schlimmer, als die Rechtschreibung ist das
> Gestammel, das einfach nur unverständlich ist.
>
> Das mag bei Smalltalk noch angehen, bei Programmierproblemen nicht.

Mag sein das es sehr unverständlich war, aber beim programmieren bin ich 
sorgfältiger, und wie oben hingewiesen, war ich am Handy und habe 
schnell geantwortet.

von Dirk (Gast)


Lesenswert?

Manchmal ist schnell aber dann doch nicht der richtige Weg!
Lieber Zeit lassen und es sauber erklären,
sonst dauert es noch länger...

von Karl H. (kbuchegg)


Lesenswert?

Na ja.
Sein Problem ist, dass der Sender führende 0-en unterdrückt.

Was somit diese Aussage ...
> ich will einen string der aus binären 8bit-Blöcken in einer Ketter besteht,
... in das Reich der Fabel verweist. Es sind eben nicht 8-Bit Blöcke.

Und nein. Das kannst du nicht lösen, sondern das muss der erzeugende 
Code lösen. Entweder er erzeugt die führenden 0-en und stellt so sicher, 
dass es wirklich immer 8 Zeichen hintereinander sind, die zu einem Byte 
gehören. Oder aber er teilt dir auf anderem Wege mit, wann die Bits 
eines Bytes vollständig sind (zb mit einem Sonderzeichen welches 
anzeigt, dass jetzt alle 'Bits' für das nächste Byte aufgelistet sind)

Anders geht es nicht. Information die weg ist, ist weg. Dein Code kann 
höchstens raten. Aber raten ist ein schlechter Ratgeber, wenn man 
zuverlässigen Code haben will. Der Datenstrom, den ein Sender erzeugt, 
muss so gestaltet sein, dass ein Empfänger diesen eindeutig 
auseinanderdröseln kann. Geht das nicht, dann ist das die Schuld des 
Senders bzw. dessen, der sich das Protokoll ausgedacht hat und nicht des 
Empfängers.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.