Pas på du ikke blander type casting og type conversion sammen.
Type casting benytter du til at tvinge compileren til at opfatte en data type som en anden, hvilken er ganske nyttigt f.eks. i forbindelse med pointere. Men det giver ikke mening, at type caste en int til en char array.
Type conversion bruger du f.eks. til det du gerne vil (?). At konvertere en int til en tekst, som f.eks. kan udskrives. Til det formål findes der et hav af funktioner som f.eks. de ovennævnte atoi(), itoa etc.
Du KAN caste fra en int til et char array - hvis det du ønsker er at få "opløst" int'ens forskellige bytes. Du skal dog være opmærksom på, at længden i bytes (dvs. chars) varierer alt efter dit operativsystem og din compiler, samt anvendelsen af short og long. Gamle DOS og Windows 3.1 compilere laver 16-bit ints (dvs. 2 bytes), med mindre du skriver 'long int' - så laves 32-bit ints. I de fleste Windows 9X (Win32) compilere er en int 32-bit med mindre du skriver 'short int' - så er det kun 16-bit.
Du kan lave dine definitioner betinget af d.o. sådan her:
int intVal = 12345; char charVal[sizeof(intVal)]; char *ptr = charVal;
Så kan du type caste sådan her:
ptr = (char *)&intVal; int nyVal = *(int *)ptr;
Igen forudsat at du blot vil "oversætte" int'en bytes, var det mere elegant/rigtigt at lave en union:
union { int intVal; char charVal[sizeof(inVal)]; } share;
Så kan du tilgå char værdien vha.
share.charVal
og int værdien vha.
share.intVal
UDEN at behøve at caste eller noget lignende.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.