LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   convert string to long/int (https://www.linuxquestions.org/questions/programming-9/convert-string-to-long-int-363278/)

alaios 09-14-2005 09:34 AM

convert string to long/int
 
Hi do u know how i can converst a character to an integer or long?

vladmihaisima 09-14-2005 09:59 AM

In what language ?

alaios 09-14-2005 10:38 AM

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

vladmihaisima 09-14-2005 12:03 PM

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);


Hko 09-14-2005 12:16 PM

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;
}


alaios 09-14-2005 04:13 PM

thx but where have u learned about the atoi? Noone book says a word a bout it

carl.waldbieser 09-14-2005 06:02 PM

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.

chrism01 09-14-2005 07:43 PM

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

Dave Kelly 09-14-2005 08:53 PM

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.

Hko 09-15-2005 04:45 AM

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.

jtshaw 09-15-2005 09:01 AM

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".


All times are GMT -5. The time now is 06:31 AM.