LinuxQuestions.org
Download your favorite Linux distribution at LQ ISO.
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices


Reply
  Search this Thread
Old 09-14-2005, 09:34 AM   #1
alaios
Senior Member
 
Registered: Jan 2003
Location: Aachen
Distribution: Opensuse 11.2 (nice and steady)
Posts: 2,203

Rep: Reputation: 45
convert string to long/int


Hi do u know how i can converst a character to an integer or long?
 
Old 09-14-2005, 09:59 AM   #2
vladmihaisima
Member
 
Registered: Oct 2002
Location: Delft, Netherlands
Distribution: Gentoo
Posts: 196

Rep: Reputation: 33
In what language ?
 
Old 09-14-2005, 10:38 AM   #3
alaios
Senior Member
 
Registered: Jan 2003
Location: Aachen
Distribution: Opensuse 11.2 (nice and steady)
Posts: 2,203

Original Poster
Rep: Reputation: 45
In c i have a string
char *mystring
mystring[0]="9999";
and i want to convert it to float or integer
but
the myint=(int)myfloat;
or the
myint=(int)myfloat[0]; dont work

Last edited by alaios; 09-14-2005 at 10:42 AM.
 
Old 09-14-2005, 12:03 PM   #4
vladmihaisima
Member
 
Registered: Oct 2002
Location: Delft, Netherlands
Distribution: Gentoo
Posts: 196

Rep: Reputation: 33
You can use the function atoi, or atof.

But maybe it would be good to read a C tutorial as it seems you are not very familiar with its concepts.

On example for atoi would be:

Code:
char s[]="999";
int i=atoi(s);
 
Old 09-14-2005, 12:16 PM   #5
Hko
Senior Member
 
Registered: Aug 2002
Location: Groningen, The Netherlands
Distribution: Debian
Posts: 2,536

Rep: Reputation: 111Reputation: 111
Quote:
Originally posted by alaios
In c i have a string
char *mystring
mystring[0]="9999";
This is not correct: At least remove '[0]' to make it work.
Quote:
and i want to convert it to float or integer
Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num;
    char *mystring;

    mystring = "9999";
    num = atoi(mystring);
    num = 2 * num;
    printf("2 times %s = %d\n", mystring, num);
    return 0;
}
 
Old 09-14-2005, 04:13 PM   #6
alaios
Senior Member
 
Registered: Jan 2003
Location: Aachen
Distribution: Opensuse 11.2 (nice and steady)
Posts: 2,203

Original Poster
Rep: Reputation: 45
thx but where have u learned about the atoi? Noone book says a word a bout it
 
Old 09-14-2005, 06:02 PM   #7
carl.waldbieser
Member
 
Registered: Jun 2005
Location: Pennsylvania
Distribution: Kubuntu
Posts: 197

Rep: Reputation: 32
Quote:
Originally posted by alaios
thx but where have u learned about the atoi? Noone book says a word a bout it
It is something you learn from experience. Some books do mention it. You could also write you own conversion function in a pinch. Just loop through the digits, multiply by powers of ten, and sum them up. E.g. (psuedo for brevity):
Code:
string_number = "1984"
power = len(string_number)
sum = 0
for digit in string_number
{
   switch(digit)
   {
      case '0':
         value = 0;
         break;
      case '1':
         value = 1;
         break;
      ...
   }
   value *= (pow(10, power));
   sum += value;
}
Could use some error checking, but you get the basic idea.
 
Old 09-14-2005, 07:43 PM   #8
chrism01
LQ Guru
 
Registered: Aug 2004
Location: Sydney
Distribution: Rocky 9.2
Posts: 18,355

Rep: Reputation: 2751Reputation: 2751Reputation: 2751Reputation: 2751Reputation: 2751Reputation: 2751Reputation: 2751Reputation: 2751Reputation: 2751Reputation: 2751Reputation: 2751
A very good book; 'A Book on C' by Kelley+Pohl; Appendices inc list of Std C fns with definitions:
http://www.amazon.com/exec/obidos/tg...33519?v=glance

Last edited by chrism01; 09-14-2005 at 07:44 PM.
 
Old 09-14-2005, 08:53 PM   #9
Dave Kelly
Member
 
Registered: Aug 2004
Location: Todd Mission Texas
Distribution: Linspire
Posts: 215

Rep: Reputation: 31
You need to do more research when you say it is not mentioned in books.
The C programming Language by K&R mentions is as early as 1988.
 
Old 09-15-2005, 04:45 AM   #10
Hko
Senior Member
 
Registered: Aug 2002
Location: Groningen, The Netherlands
Distribution: Debian
Posts: 2,536

Rep: Reputation: 111Reputation: 111
Quote:
Originally posted by alaios
thx but where have u learned about the atoi? Noone book says a word a bout it
Searching, or browsing through man pages somtimes helps to find stuff. For example:
Code:
man -k convert | grep string | less
would have revealed "atoi" and also some other (more complex) ways to do it.
 
Old 09-15-2005, 09:01 AM   #11
jtshaw
Senior Member
 
Registered: Nov 2000
Location: Seattle, WA USA
Distribution: Ubuntu @ Home, RHEL @ Work
Posts: 3,892
Blog Entries: 1

Rep: Reputation: 67
Code:
STRTOL(3)                                            Linux Programmer's Manual                                            STRTOL(3)



NAME
       strtol, strtoll, strtoq - convert a string to a long integer

SYNOPSIS
       #include <stdlib.h>

       long int
       strtol(const char *nptr, char **endptr, int base);

       long long int
       strtoll(const char *nptr, char **endptr, int base);

DESCRIPTION
       The  strtol()  function converts the initial part of the string in nptr to a long integer value according to the given base,
       which must be between 2 and 36 inclusive, or be the special value 0.

       The string must begin with an arbitrary amount of white space (as determined by isspace(3)) followed by  a  single  optional
       `+'  or `-' sign.  If base is zero or 16, the string may then include a `0x' prefix, and the number will be read in base 16;
       otherwise, a zero base is taken as 10 (decimal) unless the next character is `0', in which case it is taken as 8 (octal).

       The remainder of the string is converted to a long int value in the obvious manner, stopping at the first character which is
       not  a  valid  digit in the given base.  (In bases above 10, the letter `A' in either upper or lower case represents 10, `B'
       represents 11, and so forth, with `Z' representing 35.)

       If endptr is not NULL, strtol() stores the address of the first invalid character in *endptr.  If there were  no  digits  at
       all,  strtol()  stores  the  original  value  of  nptr  in *endptr (and returns 0).  In particular, if *nptr is not `\0' but
       **endptr is `\0' on return, the entire string is valid.

       The strtoll() function works just like the strtol() function but returns a long long integer value.

RETURN VALUE
       The strtol() function returns the result of the conversion, unless the value would underflow or overflow.  If  an  underflow
       occurs,  strtol()  returns  LONG_MIN.   If  an  overflow  occurs, strtol() returns LONG_MAX.  In both cases, errno is set to
       ERANGE.  Precisely the same holds for strtoll() (with LLONG_MIN and LLONG_MAX instead of LONG_MIN and LONG_MAX).

ERRORS
       EINVAL (not in C99) The given base contains an unsupported value.

       ERANGE The resulting value was out of range.

       The implementation may also set errno to EINVAL in case no conversion was performed (no digits seen, and 0 returned).

NOTES
       In locales other than the "C" locale, also other strings may be accepted.  (For example, the thousands separator of the cur-
       rent locale may be supported.)

       BSD also has

           quad_t
           strtoq(const char *nptr, char **endptr, int base);

       with completely analogous definition.  Depending on the wordsize of the current architecture, this may be equivalent to str-
       toll() or to strtol().

CONFORMING TO
       strtol() conforms to SVID 3, 4.3BSD, ISO 9899 (C99) and POSIX, and strtoll() to ISO 9899 (C99) and POSIX 1003.1-2001.

SEE ALSO
       atof(3), atoi(3), atol(3), strtod(3), strtoul(3)



GNU                                                          2002-05-30                                                   STRTOL(3)
strtol and strtoll are much more robust then atoi as they support bases other then decimal and allow you to set a stopping point for the conversion other then "the first invalid character".

Last edited by jtshaw; 09-15-2005 at 09:05 AM.
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
printf unsigned long long int? blackzone Programming 9 03-04-2008 12:41 PM
converting a int to string irfanhab Programming 6 07-30-2005 09:40 PM
convert unsigned char * to unsigned long int linux_lover2005 Programming 3 04-26-2005 11:38 PM
string to int BadTaste Programming 11 08-18-2004 10:23 AM
string to int in C h/w Programming 2 12-05-2003 03:47 PM

LinuxQuestions.org > Forums > Non-*NIX Forums > Programming

All times are GMT -5. The time now is 03:32 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration