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 ?
Annonceindlæg fra Computerworld it-jobbank
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 :)