Integer i char array ???

Tags:    c++ asp

Det kan godt være det er et dumt spørgsmål men jeg er stadig nybegynder i C++ men kan det lade sig gøre at putte en integer værdi ind i et char array og i såfald hvordan ?

Lars Sarbæk Kristiansen
IKT-ingeniør studerende
Ingeniørhøjskolen i Århus



8 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Det kan godt være det er et dumt spørgsmål men jeg er stadig nybegynder i C++ men kan det lade sig gøre at putte en integer værdi ind i et char array og i såfald hvordan ?

Lars Sarbæk Kristiansen
IKT-ingeniør studerende
Ingeniørhøjskolen i Århus



Hej Lars

En integer er typisk en 32 bit's variabel, og en char er en 8 bit. Da den 8 bit's variabels største tal er 256 og en integer er ca 65000, så går det galt. Du får ingen compiler fejl, med indsætter du tal større end 256 kan du ikke være sikker på hvad dit array indeholder. Ligeledes kan man komme til at overskrive andre dataområder. Så holder du dig under 255 kan det lade sig gøre!

Med venlig hilsen
Thomas Vanting



User
Bruger #884 @ 10.06.02 22:05
Det kan godt være det er et dumt spørgsmål men jeg er stadig nybegynder i C++ men kan det lade sig gøre at putte en integer værdi ind i et char array og i såfald hvordan ?

Lars Sarbæk Kristiansen
IKT-ingeniør studerende
Ingeniørhøjskolen i Århus


Du kan prøve at høre en med studerende se signatur ;o) og prøv at type caste din int til char...
Men af hvilke årsag vil du have en int ind i et char array??

Rasmus Christensen
IKT-ingeniør.stud.
Ingeniørhøjskolen i Århus



User
Bruger #24 @ 11.06.02 06:57
hvis en int er 32 bit er værdien vist nok liiiidt højere en 65K :)

hvis du har en pointer til et char array... f.eks du har en buffer der hedder unsigned char *Data;

hvis du vil have en int, short eller nadet ind på plads.. f.eks 53 kan du gøre sådan her:

unsigned char *t = Data+53;
unsigned long *T = (unsigned long *) t;

*T = 1234567;

meen det var bare lige et sidespring tror jeg :)



hvis en int er 32 bit er værdien vist nok liiiidt højere en 65K :)

hvis du har en pointer til et char array... f.eks du har en buffer der hedder unsigned char *Data;

hvis du vil have en int, short eller nadet ind på plads.. f.eks 53 kan du gøre sådan her:

unsigned char *t = Data+53;
unsigned long *T = (unsigned long *) t;

*T = 1234567;

meen det var bare lige et sidespring tror jeg :)



Hej
32 bit / 16 bit, ja det var vist en gammel vane!!!

Men problemet er jo, som jeg læser det, at tildele en integer i et char array, dette vil altid give et problem, da en char vil få i overflow. F.eks

char caTmp[100];
int iValue = 2000;

caTmp[0] = iValue;

Hvis man skal løse problem kunne man måske afsætte 4 , hvis 32 bit!!, pladser i char array'et og så shift ens integer værdi ind byte vis. Men det ville jo virke lidt mærkeligt.
Hvad angår typecast, ja det er da muligt at man kan gøre det overnævnte,

&chararray[0] (int) intvariable // ????????

Det er muligt

Hilsen Thomas Vanting






User
Bruger #24 @ 13.06.02 11:58
ja det er helt klart at hvis du har en char og du fylder værdier i (eller prøver på) på over 255, så bliver der klippet i værdien...og ja - man skal selv regne med at en typecatsed variabel vil tage den størrelse, eller antal af chars den er stor.. eg. short = 16 bit -2 bytes... Men den typecast ting jeg lavede er notop for at undgå alle de shifts og ands.. (man kunne self også lave en union .. meen :)




Det kan godt være det er et dumt spørgsmål men jeg er stadig nybegynder i C++ men kan det lade sig gøre at putte en integer værdi ind i et char array og i såfald hvordan ?

Lars Sarbæk Kristiansen
IKT-ingeniør studerende
Ingeniørhøjskolen i Århus


Hej
Et kort svar først. En char er fra 0 - 254 (det vil sige 8 bit). En integer er i MSDos 16 bit. Derfor kan den ikke være der rent fysisk. (16 bit 0 - 65534). Et array oprettes ved at der oprettes en pointer til nogle adresser. Så du kunne i princippet blot gemme din integer fordelt over flere pladser. I MSdos over to, og noget andet i Windows (integer 32 bit).

Ja og hvordan gøres dette ?

Du deller blot din variabel op i de stumper du skal bruge.

1 du and-er med 0 der hvor du vil fjerne information og den information der skal igennem sætter du 1 taler.
F.eks.

Tal & 0f = hvilket giver de 4 laveste bit..... Retsen er op til dig selv.....

IKT-ingeniør studerende
Ingeniørhøjskolen i Ballerup







[Redigeret d. 18/06-02 01:16:11 af Janus S. Andersen][Redigeret d. 18/06-02 01:16:43 af Janus S. Andersen]



User
Bruger #24 @ 20.06.02 17:33
0-255 og 0-65535 mener du vist :))



Det kan godt være det er et dumt spørgsmål men jeg er stadig nybegynder i C++ men kan det lade sig gøre at putte en integer værdi ind i et char array og i såfald hvordan ?

Lars Sarbæk Kristiansen
IKT-ingeniør studerende
Ingeniørhøjskolen i Århus


Dit spørgsmål er lidt tvetydig:

1. som tekst i array
char array[128];
int i = 10;
sprintf( array, "%i", i );

array -> teksten "10"

2. accesse byte vis i int'en
int i = 0x01020304;
unsigned char *p = &i;

p[0] == 0x01
p[1] == 0x02
p[2] == 0x03
p[3] == 0x04

3. bare assigne en værdi

char array[128];
int i = 10;
array[0] = i; // alt over 127 / under -127 (eller 128 kan ikke lige huske ) vil blive trunkeret væk


Ries[Redigeret d. 24/06-02 10:05:09 af Claus Ries]



t