was genau macht bitconverter und wie geht es ohne?

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
russkij
Beiträge: 57
Registriert: 14. Dezember 2005 11:57

was genau macht bitconverter und wie geht es ohne?

Beitrag von russkij »

hallo, folgender code, aus c#, c++ managed so ähnlich:

Code: Alles auswählen

            Byte[] data = new Byte[2];
            data[0] = 0x0b;
            data[1] = 0x02;
            int hmm = BitConverter.ToInt16(data,0);       //0x0000020b

            data = new Byte[4];
            data[0] = 0x00;
            data[1] = 0x01;
            data[2] = 0x00;
            data[3] = 0x00;
            hmm = BitConverter.ToInt32(data, 0);    //0x00000100
was macht da genau der bitconverter? wie kommt man auf diese werte ohne den bitconverter? hier weitere tests:
0x0b
0x02
0x0000020b BitConverter.ToInt16

0xf0
0x00
0x00
0x00
0x000000f0 BitConverter.ToInt32

0x0b
0x01
0x0000010b BitConverter.ToInt16

0x0b
0x02
0x0000020b BitConverter.ToInt16


0x00
0x01
0x00
0x00
0x00000100 BitConverter.ToInt32

danke und grüße
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

was macht da genau der bitconverter?
Er konvertiert Bits... :wink: im Ernst.. du siehst doch an deinen Ausgaben, dass da einfach nur die Daten anderst intepretiert werden..
wie kommt man auf diese werte ohne den bitconverter?
Da gibt es unzählige Varianten.. halt alle mit Vor- und Nachteilen (bez. Rechnerarchitektur).. einige zum herumspielen:

Code: Alles auswählen

  char data[4];
  data[0] = 0x0b;
  data[1] = 0x02;
  data[2] = 0x00;
  data[3] = 0x00;
  int hmm;

  // Variante 1: cast  (32Bit, little Endian)
  hmm = *(int*)data;
  printf("%x\n",hmm);

  // Variante 2: Maskierung und Bitshift
  hmm= data[0] << 0 |
       data[1] << 8 |
       data[2] <<16 |
       data[3] <<24;
  printf("%x\n",hmm);

  // Variante 3: Rechnen
  hmm= data[0] +            // * 2^0
       data[1]*256 +        // * 2^8
       data[2]*256*256 +    // * 2^16
       data[3]*256*256*256; // * 2^24
  printf("%x\n",hmm);

  // Variante 4: Union  (32Bit, little Endian)
  union uConverter {        
    char data[4];
    int  hmm;
  };
  uConverter c;
  memcpy(c.data,data,4);
  hmm    = c.hmm;
  printf("%x\n",hmm);
russkij
Beiträge: 57
Registriert: 14. Dezember 2005 11:57

Beitrag von russkij »

Super, danke.
solarix hat geschrieben: Er konvertiert Bits... :wink: im Ernst.. du siehst doch an deinen Ausgaben, dass da einfach nur die Daten anderst intepretiert werden..
hehe jo klar,frage war falsch gestellt, es sollte nicht was sondern wie heissen.

hab mir schon gedacht dass es relativ simpel sein muss, war aber der meinung ich muss die bits irgend wie mit einander verknüpfen.

das hat man davon, wenn man fast vom Anfang an mit Qt arbetet, da fehlt leider die Grundlage.

grüße
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

unions sind wahrscheinlich die elegateste möglichkeit. dafür sind die schließlich auch da.
Antworten