Conversie van char naar integer

Status
Niet open voor verdere reacties.

Jeppey

Gebruiker
Lid geworden
5 jun 2006
Berichten
26
Hey allemaal,
Ik ben sinds kort bezig met het uitlezen van een wave bestand en daarbij ben ik tegen een probleem aangelopen. Mijn probleem is dat ik een array heb aangemaakt waarin ik alle samples wil opslaan. Deze samples zijn in dit geval 8 bit groot. De eerste paar samples zijn allemaal gelijk aan 0x80 en dus wou ik dit controleren. Daarvoor heb ik de volgende code geschreven.

PHP:
char* data = new char[ aantal_samples ];
//...inlezen van wave bestand in data
for( int i=0; i<4; i++ )
  cout << hex << (int)data[ i ];

Maar wat hier uitkomt is 0xFF FF FF 80. Door de enkele char uit te printen en de char die correspondeert met 0x80 zie ik dat deze gelijk zijn, dus zou het moeten kloppen.

Waar mijn vraag dus op neerkomt is hoe C++ een enkele char omzet in een geheel getal zodat er 3 bytes voor komen die allemaal gezet zijn. Ik zou juist verwachten dat dit 3 keer 0x00 zou zijn.
 
Waar mijn vraag dus op neerkomt is hoe C++ een enkele char omzet in een geheel getal zodat er 3 bytes voor komen die allemaal gezet zijn. Ik zou juist verwachten dat dit 3 keer 0x00 zou zijn.

Het kan zijn dat ik je vraag verkeerd begrijp, maar je toont hier de waarde van vier verschillende chars, en niet van één enkele.

Wellicht kun je de vraag beter proberen te omschrijven. :o
 
Ja ik merk nu dat ik de vraag eenvoudiger kan beschrijven, maar ik zie zojuist wat er mis gaat. Het heeft namelijk te maken met unsigned char. De vraag was dus:

PHP:
char c = 128;
int i = (int)c;
cout << i; //er wordt -128 afgedrukt ipv 128

Maar de oorzaak is natuurlijk de char die van -128 t/m 127 loopt.
 
een char is maar 1 byte, dus kan een waarde hebben van -128 tot en met 127. 128 is dus geen geldige waarde hiervoor.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan