Hallo, bin neu hier und weiss nicht, ob ich richtig bin in diesem thread mit meinem thema, aber ich versuchs mal;) Also muss ein byte array so manipulieren, dass ich ein scheinbares "1bit +8bit" datenformat bekomme. also rutscht nach jedem byte die ganze geschichte um 1 mehr nach hinten, was in einem weitern array aufgefangen wird. das amcht die ganze sache mit dem shiftcommand etwas undurchsichtig. Beispiel, wie es sein sollte: die 8 bit nutzdaten: 01111011bin = 123dez 00010000bin = 32dez 11110101bin = 245dez mit einer 1(D/XC) vorab für jedes Byte verschiebt sich das ganze system so: 10111101bin = 189dez 11000100bin = 196dez 111110bin = 62dez 10100000bin =160dez(3 ersten bit sind die lezten 3 bit von 245dez, quasi neues array wegen den zusätlichen einsen) real hab ich ca 200byte nutzdaten im array, was sich mit ner führenden 1 auf 200byte plus 25 byte führende 1 vergrößert. ich stehe da grade etwas aufm schlauch. vll hat einer einen tipp, wie ich da ran gehen kann? Dafür wäre ich sehr dankbar. Eigentlich bezieht sich das mehr auf c#, aber vll hat hier ja jemand damit erfahrung, wie ich mein array soweit manipulieren könnte grussa alex
Jo, habs gelöst. warscheinlich nicht grade auf die sauberste art und weiste, aber es läuft. ,,...abgesehen davon bin ich kein vollblut-inf;-). muss zugeben, hat mich ne menge nerven gekosten, aber man auch auch ne menge gelernt und man hat sogar spass dran, wenn es am ende geht!! Leider war es mit den üblichen Bitoperationen nicht getan. gruss alex C#:
1 | static class Program |
2 | {
|
3 | |
4 | static void Main() |
5 | |
6 | {//Testarray |
7 | byte[] byteArray = new byte[] { 1, 255, 1, 255, 1, 255, 1, 255 }; |
8 | |
9 | string binstring = ByteToString(byteArray); |
10 | Console.WriteLine("binstring D/XC: " + binstring); |
11 | bitstring(binstring); |
12 | |
13 | |
14 | }
|
15 | |
16 | |
17 | //Wandelt byte array in binären String 1 + 8bit
|
18 | private static string ByteToString(byte[] ByteArray) |
19 | {
|
20 | System.Text.StringBuilder sb = new StringBuilder(); |
21 | int i = 0; |
22 | foreach (byte b in ByteArray) |
23 | {
|
24 | sb.Append(Convert.ToString(b, 2).PadLeft(9, '0')); |
25 | string s = "1";//wird dann 1 |
26 | sb[9 * i] = s[0]; |
27 | i++; |
28 | }
|
29 | return sb.ToString(); |
30 | }
|
31 | |
32 | //zerlegt 9bit string(1+8bit) in 8 bitblöcke
|
33 | private static int bitstring(string str) |
34 | {
|
35 | int i = 0; |
36 | int s = 0; |
37 | int count = 0; |
38 | string bitstring = "0"; |
39 | //Array größe anpassen:!!
|
40 | byte[] newbyteArray = new byte[9]; |
41 | |
42 | for (i = 0; i < str.Length; i = i + 8) |
43 | {
|
44 | |
45 | bitstring = "" + str[0 + i] + str[1 + i] + str[2 + i] + str[3 + i] + str[4 + i] + str[5 + i] + str[6 + i] + str[7 + i]; |
46 | s = bintodec(bitstring); |
47 | byte b = (byte)s; |
48 | Console.Write(b + "\n"); |
49 | newbyteArray [count] = b; |
50 | count++; |
51 | }
|
52 | |
53 | Console.WriteLine(newbyteArray.Length); |
54 | foreach (byte val in newbyteArray) { Console.WriteLine("aus array" + val); } |
55 | return s; |
56 | }
|
57 | |
58 | // Umerechung von 8bit bin in dec
|
59 | private static int bintodec(string str) |
60 | {
|
61 | int a = 0; int b = 0; int c = 0; int d = 0; |
62 | int e = 0; int f = 0; int g = 0; int h = 0; |
63 | string bin0 = "0"; |
64 | |
65 | if (str[0] == bin0[0]) { a = 0; } else { a = 128; } |
66 | if (str[1] == bin0[0]) { b = 0; } else { b = 64; } |
67 | if (str[2] == bin0[0]) { c = 0; } else { c = 32; } |
68 | if (str[3] == bin0[0]) { d = 0; } else { d = 16; } |
69 | if (str[4] == bin0[0]) { e = 0; } else { e = 8; } |
70 | if (str[5] == bin0[0]) { f = 0; } else { f = 4; } |
71 | if (str[6] == bin0[0]) { g = 0; } else { g = 2; } |
72 | if (str[7] == bin0[0]) { h = 0;} else { h = 1; } |
73 | |
74 | int val = (a + b + c + d + e + f + g + h); |
75 | return val; |
76 | }
|
77 | |
78 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.