Конвертация стринга
От: Аноним  
Дата: 06.04.04 13:48
Оценка:
Возможно ли стандартными средствами сконвертировать стринг, в котором содержится число в шестнадцатиричной системе исчисления в кодировке ASCII в тип int? Что-то подобное atoi(), работающее ,например, с таким стрингом ['1'],['0'],['D'],['F'] ->
-> 4319 (int)
Спасибо.
Re: Конвертация стринга
От: LaptevVV Россия  
Дата: 06.04.04 13:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Возможно ли стандартными средствами сконвертировать стринг, в котором содержится число в шестнадцатиричной системе исчисления в кодировке ASCII в тип int? Что-то подобное atoi(), работающее ,например, с таким стрингом ['1'],['0'],['D'],['F'] ->

->> 4319 (int)
А>Спасибо.
Смотри в сторону строковых потоков.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Конвертация стринга
От: fest Германия  
Дата: 06.04.04 14:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Возможно ли стандартными средствами сконвертировать стринг, в котором содержится число в шестнадцатиричной системе исчисления в кодировке ASCII в тип int? Что-то подобное atoi(), работающее ,например, с таким стрингом ['1'],['0'],['D'],['F'] ->

->> 4319 (int)
А>Спасибо.


/************** function *******************/
unsigned int HexToDec(CString tmpHexadecimal, bool *flag)
{
// funktionslokale Variablen
char hextab[17] = "0123456789ABCDEF";
int i,j;
unsigned int nDezimal = 0;

*flag = true;

tmpHexadecimal.MakeUpper();

if (tmpHexadecimal.GetLength() > 8)
{
nDezimal = 0;
*flag = false;
}
else
{
for(i=0; i < tmpHexadecimal.GetLength(); i++)
{
for(j=0; j<=16; j++)
{
if (hextab[j] == (tmpHexadecimal.GetAt(i)))
{
nDezimal = nDezimal*16 + j;
*flag = true;
break;
}
else
{
if (j == 16)
nDezimal = 0;
*flag = false;
}
}
}
}
return (nDezimal);
}

/************** call *******************/
int iResult = 0;
bool flagNoErr = false;
CString SourceString("10DF");

iResult = HexToDec(SourceString,&flagErr) //iResult==4319, flagNoErr = true
Re[2]: Конвертация стринга
От: VVV Россия  
Дата: 06.04.04 15:24
Оценка: 1 (1) +1
Здравствуйте, fest, Вы писали:

F>Здравствуйте, Аноним, Вы писали:


А>>Возможно ли стандартными средствами сконвертировать стринг, в котором содержится число в шестнадцатиричной системе исчисления в кодировке ASCII в тип int? Что-то подобное atoi(), работающее ,например, с таким стрингом ['1'],['0'],['D'],['F'] ->

->>> 4319 (int)
А>>Спасибо.

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



strtol expects nptr to point to a string of the following form:


[whitespace] [{+ | –}] [0 [{ x | X }]] [digits]

A whitespace may consist of space and tab characters, which are ignored; digits are one or more decimal digits. The first character that does not fit this form stops the scan. If base is between 2 and 36, then it is used as the base of the number. If base is 0, the initial characters of the string pointed to by nptr are used to determine the base. If the first character is 0 and the second character is not 'x' or 'X', the string is interpreted as an octal integer; otherwise, it is interpreted as a decimal number. If the first character is '0' and the second character is 'x' or 'X', the string is interpreted as a hexadecimal integer. If the first character is '1' through '9', the string is interpreted as a decimal integer. The letters 'a' through 'z' (or 'A' through 'Z') are assigned the values 10 through 35; only letters whose assigned values are less than base are permitted.


т.е. strtol("10DF", NULL, 16);
Re: Конвертация стринга
От: MaximE Великобритания  
Дата: 07.04.04 02:08
Оценка:
> Возможно ли стандартными средствами сконвертировать стринг, в котором содержится число в шестнадцатиричной системе исчисления в кодировке ASCII в тип int? Что-то подобное atoi(), работающее ,например, с таким стрингом ['1'],['0'],['D'],['F'] ->
> -> 4319 (int)

Если на скорую руку, то так:

#include <string>
#include <sstream>

int main()
{
     int n;
     std::string s1("10DF");
     std::stringstream(s1) >> std::hex >> n;
}


--
Maxim Egorushkin
MetaCommunications Engineering
http://www.meta-comm.com/engineering/
Posted via RSDN NNTP Server 1.8 beta
Re: Конвертация стринга
От: bel_nikita  
Дата: 07.04.04 06:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Возможно ли стандартными средствами сконвертировать стринг, в котором содержится число в шестнадцатиричной системе исчисления в кодировке ASCII в тип int? Что-то подобное atoi(), работающее ,например, с таким стрингом ['1'],['0'],['D'],['F'] ->

->> 4319 (int)
А>Спасибо.

А че, sscanf() не катит?
Re: Конвертация стринга
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 07.04.04 06:55
Оценка: 1 (1)
wrote:

> Возможно ли стандартными средствами сконвертировать стринг, в котором

> содержится число в шестнадцатиричной системе исчисления в кодировке ASCII
> в тип int? Что-то подобное atoi(), работающее ,например, с таким стрингом
> ['1'],['0'],['D'],['F'] -> -> 4319 (int) Спасибо.
Это правда нестандартными, потому что Boost.spirit не стандарт, но
достаточно интересно
#include <boost/spirit.hpp>
#include <boost/spirit/dynamic.hpp>

#include <iostream>

using namespace boost::spirit;

int main(int argc, char* argv[])
{
    for(; argc > 1; --argc, ++argv)
    {
        unsigned int result;

        bool ok = parse(
                argv[1],
                if_p("0x")[
                    hex_p[assign_a(result)]
                ]
                .else_p
                [
                    uint_p[assign_a(result)]
                ]
            ).full;

        if(!ok)
            std::cerr << "Can't parse " << argv[1] << '\n';
        else
            std::cout << argv[1] << " = " << result << '\n';
    }
}

--
Александр Насонов,
Независимый консультант и разработчик ПО
Posted via RSDN NNTP Server 1.8 beta
Re: Конвертация стринга
От: Аноним  
Дата: 07.04.04 06:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Возможно ли стандартными средствами сконвертировать стринг, в котором содержится число в шестнадцатиричной системе исчисления в кодировке ASCII в тип int? Что-то подобное atoi(), работающее ,например, с таким стрингом ['1'],['0'],['D'],['F'] ->

->> 4319 (int)
А>Спасибо.


Convert strings to a long-integer value.

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


Parameters
nptr
Null-terminated string to convert.
endptr
Pointer to character that stops scan.
base
Number base to use.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.