Avatar billede bjkl Nybegynder
07. oktober 2002 - 18:05 Der er 4 kommentarer og
1 løsning

Type casting

Hvordan eller kan man overhovedet caste fra int til et char array og vica versa
Avatar billede soreno Praktikant
07. oktober 2002 - 18:09 #1
char buffer[20];
int val = 12345;
itoa(val, buffer, 10); //src, dest, radix (husk på Int TO Array)
val = atoi(buffer); //husk på Array TO Int
Avatar billede soreno Praktikant
07. oktober 2002 - 18:12 #2
et fungerende eksemple kunne se sådan ud:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  char buffer[20];
  int val = 12345;
 
  itoa(val, buffer, 10);
  printf("val er nu konverteret til et char array: %s\n", buffer);

  val = atoi(buffer);
  printf("buffer er nu konverteret til en int: %i\n", val);

  return 0;
}
Avatar billede doc404 Novice
07. oktober 2002 - 19:13 #3
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.
Avatar billede borrisholt Novice
08. oktober 2002 - 08:36 #4
int i = 0xFFFF;
char *p = (char *)i;

Jens B
Avatar billede soepro Nybegynder
08. oktober 2002 - 08:39 #5
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester