» bitoperationen in c

Eingabe von Dezimalzahlen verhindernNeuen Thread eröffnenNeue Antwort erstellenSteganographie zum Experimentieren mit der Verschlüsselung von Dateien
AutorNachricht
Gesperrt 
Anmeldedatum: 23.05.2013
Beiträge: 1
23.05.2013, 22:44
zitieren

Hallo,

ich habe eine Funktion geschrieben welches aus einem char-array mit 6 Komponenten (also 8*6 Bits insgesamt) jeweils 2 12-Bit-Werte, die hintereinander stehen, zunächst geoordnet zusammenenführen und dann zurückgeben soll:


void LeseMW(char kMW[], unsigned short ixKMW,unsigned short *mw1 ,unsigned short *mw2)
{
 *mw1=(kMW[ixKMW]<<4)+(kMW[ixKMW+1]>>4);
 *mw2=((kMW[ixKMW+1]<<8)+(kMW[ixKMW+2]))-((kMW[ixKMW+1]>>4)<<12);
}


int main(int argc, char *argv[])
{
    unsigned short a=0,b=0;
    char KWM[]={0x12,0x34,0x56,0xab,0x01,0xfe};

    LeseMW(KWM,0,&a,&b); //ixKMW=0

    printf("mw1:%d \nmw2:%d \n",a,b);

    system("pause");
    return 0;
}


mit ixKMW=0 funktioniert es, doch mit ixKMW=3 nicht mehr.

Woran kann das liegen?

mfg lorent


pn
Junior 
Name: Voller Name als Anagramm: Fitje Weshoms
Geschlecht:
Fahrzeug: Yamaha YZF R6 Thundercat
Anmeldedatum: 15.07.2012
Beiträge: 92
Wohnort: Amberg, Oberpfalz
25.05.2013, 15:43
zitieren

Hallo lorent!

Vieleicht liegt es daran das du 8-Bit-Werte in unsigned short-Werte, also 16 Bit umwandelst
Somit werden die höherwertigen Bits bei einer nach-links-Schiebe-Operation in das
höhere Byte, das links steht, rein geschoben.
Bei einer Schiebeoperation nach rechts fallen diese Bits raus.

Möglicherweise kannst du das mit einer And-Operation verhindern.
Beispiel:

Ergebnis_der_Schiebeoperation = (kMW[ixKMW]<<4) & 255;
Ergebnis2 = (kMW[ixKMW+1]<<8) & 255;

void LeseMW(char kMW[], unsigned short ixKMW,unsigned short *mw1 ,unsigned short *mw2)
{
 *mw1=((kMW[ixKMW]<<4) & 255)+(kMW[ixKMW+1]>>4);
 *mw2=(((kMW[ixKMW+1]<<8)&255)+(kMW[ixKMW+2]))-(((kMW[ixKMW+1]>>4)&255)<<12);
}

Damit werden die höherwertigen Bytes gelöscht und die unsigned short-Werte beinhalten nur
unsigned char-Werte vor der Rechenoperation.

Probiers mal aus.

Guiseppe


pn
Gast 
25.05.2013, 15:43
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "bitoperationen in c" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neue Antwort erstellen
© 2004 - 2025 www.programmierer-forum.de | Communities | Impressum |