Solved

# Convert hexadecimal string to int

Posted on 2004-10-03
19,011 Views
How to convert a string like "1e234", located in a file, to int format using standard C functions?
0
Question by:epsa

LVL 55

Accepted Solution

Jaime Olivares earned 125 total points
Just use sscanf:

int number;
char *str =  "1e234";   /* test string */

sscanf(str, "%x", &number);

good luck,
Jaime.
0

LVL 86

Expert Comment

You'd use 'strtol()', it handles all numeric bases:

Example

/* STRTOD.C: This program uses strtod to convert a
* string to a double-precision value; strtol to
* convert a string to long integer values; and strtoul
* to convert a string to unsigned long-integer values.
*/

#include <stdlib.h>
#include <stdio.h>

void main( void )
{
char   *string, *stopstring;
double x;
long   l;
int    base;
unsigned long ul;
string = "3.1415926This stopped it";
x = strtod( string, &stopstring );
printf( "string = %s\n", string );
printf("   strtod = %f\n", x );
printf("   Stopped scan at: %s\n\n", stopstring );
string = "-10110134932This stopped it";
l = strtol( string, &stopstring, 10 );
printf( "string = %s", string );
printf("   strtol = %ld", l );
printf("   Stopped scan at: %s", stopstring );
string = "10110134932";
printf( "string = %s\n", string );
/* Convert string using base 2, 4, and 8: */
for( base = 2; base <= 8; base *= 2 )
{
/* Convert the string: */
ul = strtoul( string, &stopstring, base );
printf( "   strtol = %ld (base %d)\n", ul, base );
printf( "   Stopped scan at: %s\n", stopstring );
}
}

Output

string = 3.1415926This stopped it
strtod = 3.141593
Stopped scan at: This stopped it

string = -10110134932This stopped it   strtol = -2147483647   Stopped scan at: This stopped itstring = 10110134932
strtol = 45 (base 2)
Stopped scan at: 34932
strtol = 4423 (base 4)
Stopped scan at: 4932
strtol = 2134108 (base 8)
Stopped scan at: 932

0

LVL 9

Expert Comment

>How to convert a string like "1e234", located in a file,to int?

Adding to what jaime said,use fscanf() to directly read from the file and convert to int.
FILE *fp;

fscanf(fp,"%x",&number);

You'd like to use strtol() etc. for better error checking though.
0

Author Comment

Unix doesn't support Strtol() :(
0

LVL 55

Expert Comment

any variant of scanf() family will be OK and very portable.
0

## Featured Post

### Suggested Solutions

Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.
The goal of this video is to provide viewers with basic examples to understand how to use strings and some functions related to them in the C programming language.