Seite 1 von 1

was genau macht bitconverter und wie geht es ohne?

Verfasst: 15. November 2009 23:48
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

Verfasst: 16. November 2009 08:36
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);

Verfasst: 16. November 2009 09:24
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

Verfasst: 30. Januar 2010 16:51
von slash-ex
unions sind wahrscheinlich die elegateste möglichkeit. dafür sind die schließlich auch da.