Laden...

byte array manipulieren

Erstellt von schickmaster vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.818 Views
S
schickmaster Themenstarter:in
2 Beiträge seit 2010
vor 13 Jahren
byte array manipulieren

hallo,

ich habe folgendes problem mit eine bitansteuerung.
ich muss ein byte array so manipulieren, das ich nach allen 8 bit jeweils eine logische 1
voranstelle. datentyp ist also 1bit+8bit. ich bekomme das array als 8bit array übergeben aus einer bestehenden funktion.

bsp: 1001bin = 9dec wird mit byte[]{9} als 00001001bitfolge gesendet.

es müsste aber so aussehen:

1 00001001,

wahlweise können auch 2 byte gesendet werden(die letzen 7 werde dann hardwarebedingt ignoriert)
bsp:
10000100 10000000, sprich byte[]{132, 128};

am besten wäre, wenn jemand eine idee hätte, wie man dieses array mit ca. 100 byte so manipulieren kann, das jedes Byte mit einer führende logische 1 versehen wird.

fällt da jemandem eine elegante lösung ein? steh zur zeit etwas aufm schlauch. (liegt vll auch daran, das freitag ist)

gruss alex

V
78 Beiträge seit 2008
vor 13 Jahren

Du wirst wohl die Variante mit den 2 Bytes nehmen müssen, da der kleinste Datentyp ein byte(8 bit) ist.
So reicht es dann auch aus, wenn du vor jedem byte in dem Array ein neues byte einfügst, mit dem Wert -128 (signed, dez. = 1000 0000b). Dadurch wird dein Array natürlich doppelt so groß.

5.658 Beiträge seit 2006
vor 13 Jahren

Du suchst also einen Datentyp mit 9 Bytes? Entweder verwendest du Int oder Short, oder du mußt das Array mit Bit-Operationen verändern, was ziemlich aufweändig ist, wenn du z.B. in der Mitte ein Bit einfügen willst, dann mußt du ja alle folgenden Elemente um 1Bit nach links shiften. Kommt halt darauf an, wieviel Aufwand du dir machen willst, und was du eigentlich damit vorhast.

// Edit:

Oder alternativ ein zweites Array vom Typ bool[] anlegen, was dem 9ten Bit jedes Elements entspricht.

Weeks of programming can save you hours of planning

S
schickmaster Themenstarter:in
2 Beiträge seit 2010
vor 13 Jahren

also konkret gehts um eine 9bit displayansteuerung über c#

9bit datentyp mit 1bit D/XC(Datenselect) und 8 bit nutzdaten.
mit dem array wird ein bild gesendet. die dll der adation kann nur byte verarbeiten.

wenn ich nun z.B. 100 byte im befehl sende, will ich jedem eine 1 voranstellen,
so das die bytes nach dem byte in neuen um eine stelle nach hinten rutschen.

  1. byte beginnt an stelle 2
  2. an beginnnt an stelle 10
    ...

bis quasi nach 9 gesendeten byte 8 byte nutzdaten und 1 byte steuerdaten gesendet wurden.

denn befehl mit nur 2 byte aufrufen ist möglich, aber das steuergeräte ist ziemlich lam und so würde ich 50kb im gefühlten 100 stunden beschreiben können.

im kopf habe ich in etwa das ich das array wie oben gennant umform und dann wieder als array der funktion übergebe. aber wie ich das softwareseitig realisiere, weiss ich leider nicht.

V
78 Beiträge seit 2008
vor 13 Jahren

Das Problem ist, es gibt keinen Datentyp der aus 9 bit besteht. Und selbst wenn könnte er nicht so verarbeitet/gespeichert werden, da alle Datentypen Vielfache von 1 byte sind (short=2byte, int=4byte, ...).
Ich kenne auch keine Assemblerbefehle, die mit Werten kleiner als einem byte rechnen. Du musst also mindestens 2 byte schicken.
Auch bool's sind ein byte groß und nicht 1 bit.

Und wenn du 2 bytes sendest musst du einfach vor jedem Element in deinem byte Array ein neues byte mit dem Wert: 1000 0000(bin.) einfügen.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo schickmaster,

aber wie ich das softwareseitig realisiere, weiss ich leider nicht.

das fällt allerdings unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore