C# String in 8er blöcke unterteilen und in byte array einordnen

Gast #3310475
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
#3311717
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
Gast #3312166
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
Gast #3312567
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
Gast #3313579
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.
#3313878
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren