C typecasting m.m.

Tags:    c++ databaser

Hej

Jeg ønsker noget C kode (IKKE C++) der generere en tekst streng ala:

"2:ipad=10.0.0.2:tblc=internal"

Mit problem er at jeg endnu er for dum til at håndtere strenge/arrays/int på en ansvarlig
måde, nedenstående program stump, er revet ud af en sammenhæng,, jeg har derfor
tilføjet variable def. af hensyn til sammenhængen. m.m..
Kort sagt hvordan for jeg "pool_count" indføjet i en tekststreng, dette fejler naturligvis nu, da "pool_count" er en int., og "poolline" er char.
Jeg har forsøgt et typecast, men får så igen naturligvis en fejl, da int og char har forskellige størrelser.
Håber nogle vil løsrive mig fra min himmelråbende dumhed..*S*

----
int pool_count=2
char dhcp_iprange[]="10.0.0."
char poolline[]=""

/* Construct the poollines */
while (pool_count!=253){
strcpy(poolline, pool_count);
strcat(poolline, ": :ipad=");
strcat(poolline, dhcp_iprange);
strcat(poolline, pool_count);
strcat(poolline, ":tblc=internal/n");
fputs(poolline,poolfile);
pool_count++;
}
fputs(poolline,poolfile);
---

Mvh
Michael Larsen



7 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Nu er denne posting jo et stykke tid gammelt efterhånden, men her er en itoa funktion hvis du stadig mangler den:

<pre>
#include <string.h>

/*reverse: reverse string s in place*/
void reverse(char s[]) {
int c, i, j;

for (i=0, j=strlen(s)-1; i<j; i++, j--) c=s, s=s[j], s[j]=c;

}

/*itoa: convert n to characters in s*/
void itoa(int n, char s[]) {
int i, sign;

if ((sign = n) < 0) n = -n; /*record sign*/

i=0;
do { /*generate digits in reverse order*/
s[i++] = n % 10 + '0'; /*make n positive*/
} while ((n /= 10) > 0);

if (sign < 0) s[i++] = '-';
s = '<0';
reverse(s);
}
</pre>

Mvh.,

Jakob Justsen




User
Bruger #55 @ 28.11.02 06:53

int pool_count=2
char dhcp_iprange[]="10.0.0."
char poolline[]=""

/* Construct the poollines */
while (pool_count!=253){
strcpy(poolline, pool_count);
strcat(poolline, ": :ipad=");
strcat(poolline, dhcp_iprange);
strcat(poolline, pool_count);
strcat(poolline, ":tblc=internal/n");
fputs(poolline,poolfile);
pool_count++;
}
fputs(poolline,poolfile);


Hej du kan bruge itoa funktionen så bliver det til :

int pool_count=2
char dhcp_iprange[]="10.0.0."
char poolline[]=""
char buffer[20];

/* Construct the poollines */
while (pool_count!=253){
_itoa(pool_count,buffer,10);
strcpy(poolline, buffer);
strcat(poolline, ": :ipad=");
strcat(poolline, dhcp_iprange);
strcat(poolline, buffer);
strcat(poolline, ":tblc=internal/n");
fputs(poolline,poolfile);
pool_count++;
}
fputs(poolline,poolfile);



Er itoa funktionen ikke kun tilstede på Windows platformen ?,
Jeg fik vist ikke nævnt at dette er på unix (FreeBSD), der skal køre..






Hej du kan bruge itoa funktionen så bliver det til :

int pool_count=2
char dhcp_iprange[]="10.0.0."
char poolline[]=""
char buffer[20];

/* Construct the poollines */
while (pool_count!=253){
_itoa(pool_count,buffer,10);
strcpy(poolline, buffer);
strcat(poolline, ": :ipad=");
strcat(poolline, dhcp_iprange);
strcat(poolline, buffer);
strcat(poolline, ":tblc=internal/n");
fputs(poolline,poolfile);
pool_count++;
}
fputs(poolline,poolfile);
Mvh
Michael Larsen



User
Bruger #55 @ 28.11.02 16:38
Den ligger i stdlib.h derfor vil jeg tro det gælder på alle platforme, men jeg er da ikke 100%, men prøv det og giv lyd :)
Er itoa funktionen ikke kun tilstede på Windows platformen ?,
Jeg fik vist ikke nævnt at dette er på unix (FreeBSD), der skal køre..






Hej du kan bruge itoa funktionen så bliver det til :

int pool_count=2
char dhcp_iprange[]="10.0.0."
char poolline[]=""
char buffer[20];

/* Construct the poollines */
while (pool_count!=253){
_itoa(pool_count,buffer,10);
strcpy(poolline, buffer);
strcat(poolline, ": :ipad=");
strcat(poolline, dhcp_iprange);
strcat(poolline, buffer);
strcat(poolline, ":tblc=internal/n");
fputs(poolline,poolfile);
pool_count++;
}
fputs(poolline,poolfile);
Mvh
Michael Larsen





nope... det viker som om der kun er funktioner der anden vej aka atoi, men ikke itoa..??
Så jeg er MEGET lydhør over for andre forslag.....


-----
Den ligger i stdlib.h derfor vil jeg tro det gælder på alle platforme, men jeg er da ikke 100%, men prøv det og giv lyd :)


Mvh
Michael Larsen



User
Bruger #55 @ 29.11.02 20:06
Hej jeg lavede lige en search på google, det ser ikke ud til den findes i unix :(
men du har jo altid muligheden for at bikse en selv, her er et eksempel jeg lige har lavet, men det er _ikke_ testet :

int atoi(char* pchIn) {
int i,result,adder,len;
result=0;
adder=1;
len = strlen(pchIn);
for (i=1;i<=len;i++) {
if ((pchIn[len-i]<58)&&(pchIn[len-i]>47)) {
result += ((pchIn[len-i]-48)*adder);
adder *= 10;
}
}
return result;
}

nope... det viker som om der kun er funktioner der anden vej aka atoi, men ikke itoa..??
Så jeg er MEGET lydhør over for andre forslag.....


-----
Den ligger i stdlib.h derfor vil jeg tro det gælder på alle platforme, men jeg er da ikke 100%, men prøv det og giv lyd :)


Mvh
Michael Larsen





User
Bruger #55 @ 29.11.02 20:06
DOOH :)
Det var jo omvendt du manglede[Redigeret d. 29/11-02 21:16:30 af Kaspar Pedersen]



t