17. januar 2009 - 21:49
Der er
5 kommentarer og
1 løsning
unsigned int virker ikke ?
Hej med jer
Jeg har kodet følgende metode, men den driller og jeg kan ikke forstå hvorfor !?
unsigned int byteToUInt32(char *bytearray)
{
return (unsigned int)(bytearray[3] << 24 | bytearray[2] << 16 |
bytearray[1] << 8 | bytearray[0]);
}
Hvis byte array'et ser sådan her ud :
0xFE, 0xDC, 0xBA, 0x98
Får jeg et output fra metoden der ser sådan her ud:
4294967294 (0xFFFFFFFE)
Men hvis array'et ser ud som det her:
0x49, 0x66, 0x6F, 0x73
så returnere metoden det rigtige resultat, altså 1936680521 (0x736F6649) !?
For mig ser det ud som om den returnerede int er signed, altså modsat af hvad jeg beder den om... Hvor dog det ?
17. januar 2009 - 21:51
#1
Prøv of lav dit byte array til unsigned.
17. januar 2009 - 21:52
#2
Når en signed byte 0x98 promotes til signed int bliver den 0xFFFFFF98
17. januar 2009 - 21:55
#3
Bemærk iøvrigt at din kode konverterer et byte array til en int som little endian.
memcpy(&dinint, ditbytearray, sizeof(int));
vil konvertere et byte array til en int med systemets endianess.
Det er to forskellige typer funktionalitet (forskellen vise sig dog kun på big endian
systemer såsom PPC og SPARC).
17. januar 2009 - 21:57
#4
Hvis du vil bøje reglerne lidt, så er der:
dinint = *((int*)&ditbytearray);
Den bruger også systemets endianess.
Og kører du på en SPARC og ditbytearray ikke starter på en addresse som er et multipla
af 4, så får du en fejl.
17. januar 2009 - 22:13
#5
Du har fuldstændig ret mht. at lave mit bytearray om til unsigned. Det med funktionalitet er lige en tand over min forstand, men smid et svar :)
17. januar 2009 - 22:17
#6
svar
Kurser inden for grundlæggende programmering