Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Преоброзовние Строки в Число


Автор: Mark4545 28.7.2007, 20:47
Собствено сама проблема в названии темы.
Также можно вставки _asm (Желательно с коментами)(но предпочтительне средствами Виндоус апи)
П.С IDE 2003 студия

Автор: JackYF 28.7.2007, 23:39
Цитата(Mark4545 @  28.7.2007,  20:47 Найти цитируемый пост)
Собствено сама проблема в названии темы.

itoa к WinAPI имеет не большее отношение, чем я к бальным танцам. Раз.

Недавно здесь пробегала похожая тема, где было указано не менее 5 способов этого преобразования.
Для тебя хорошая возможность развить навык пользования поиском по разделу. Два.

Автор: Mark4545 29.7.2007, 00:35
Прежде чем советовать Другим юзать поиск научился бы сам юзать  его.
Или может я непрально юзаю , ну никак не могу найти способ Преобразовния Строки в число
СРЕДСТВАМИ ВИН АПИ

Автор: JackYF 29.7.2007, 00:49
Цитата(Mark4545 @  29.7.2007,  00:35 Найти цитируемый пост)
Или может я непрально юзаю , ну никак не могу найти способ Преобразовния Строки в число
СРЕДСТВАМИ ВИН АПИ 

Блин. вот что значит отсутствие запятой. Для интереса, почему я так ответил, прочитай строку с темой так, как она там написана.

Раз суть вопроса мы выяснили, тогда пойдем дальше. А собственно, зачем? Чем не подходит все остальное?
Если такая функция существует в WinAPI, о чем я вроде бы не осведомлен, то это же будет полный караул по производительности...

Автор: Mark4545 29.7.2007, 00:55
2JackYF Какая разница зачем мне это нужно.Значит нужно.
Давай не будем разводить флейм, если такого варианта конечно нет , как вариант вставки из 
АСМ.

Автор: JackYF 29.7.2007, 01:08
Цитата(Mark4545 @  29.7.2007,  00:55 Найти цитируемый пост)
Какая разница зачем мне это нужно.Значит нужно.

плохой ответ. Ты же просишь помощи, а вот например я реально не могу понять, чем тебя не устраивает C++ RTL.

Цитата(Mark4545 @  29.7.2007,  00:55 Найти цитируемый пост)
как вариант вставки из 
АСМ. 

вот я еще раз не понимаю, почему ты ограничиваешь выбор ВинАПИ и асмом. Учитывая, что хорошие реализации C++ RTL под конкретную платформу наверняка используют ассемблер в критических участках кода.

Что тебе требуется? портабельность? производительность? краткость? я просто не могу понять...

Автор: Mark4545 29.7.2007, 01:21
Создай отдельную тему и там флейми.Или создай тему чем mark4545 не устраивает C++ RTL.
И плиз не разводи флейм.

Автор: dumb 29.7.2007, 01:52
Цитата(Mark4545 @  29.7.2007,  00:55 Найти цитируемый пост)
если такого варианта конечно нет , как вариант вставки из АСМ.
вариант конечно есть, но ты вставляй асм, пока вежливости не научишься. smile

Автор: Mark4545 29.7.2007, 01:58
Спс dump твой ответ мне очень помог.Очень много информации в немsmile

Автор: W4FhLF 29.7.2007, 06:36
Я так и не понял. Что на входе, что на выходе? Какие типы, какие требования к коду? Можно ли юзать WinAPI(почти весь RTL есть в ntdll, если ты его не хочешь использовать)? Ну нипонятна же...

Автор: Andrey44 29.7.2007, 09:04
Попробуй через сравнение символов по ASCII коду. smile 

             dec          hex
0           48            30
1           49            31
2           50            32
3           51            33
4           52            34
5           53            35
6           54            36
7           55            37
8           56            38
9           57            39

Помоему так попробуй. smile 

Автор: Andrey44 29.7.2007, 09:57
Вот набросал пример smile 
Код

#include "stdafx.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    char ch1[] = {"gt48jhds4nd84js923j"};
    int temp = 0;
    for(int i = 0; i < strlen(ch1); i++){
        for(int j = 0; j < 10; j++)
            if(ch1[i]==48+j){
                switch(ch1[i]){
                    case 48: temp = 0; break;
                    case 49: temp = 1; break;
                    case 50: temp = 2; break;
                    case 51: temp = 3; break;
                    case 52: temp = 4; break;
                    case 53: temp = 5; break;
                    case 54: temp = 6; break;
                    case 55: temp = 7; break;
                    case 56: temp = 8; break;
                    case 57: temp = 9; break;
                    default:
                        break;
                }
                cout<<temp<<endl;
            }
    }
    return 0;
}


Всё работает smile 

Автор: W4FhLF 29.7.2007, 11:08
Andrey44, проще 0x30 отнимать от каждого байта, чем такое городить. 

Автор: Mark4545 29.7.2007, 12:10
Сенкс ту Андрей44.
Просто используеться прагма 
ENTRY:/DllMain
/NODEFAULTLIB
/MERGE:.rdata=.text
Поэтому ругаеться компилятор, без них как по маслу но размер большой.                           

Автор: Andrey44 29.7.2007, 12:20
W4FhLF Я показал как это можно сделать на примере ,а оптимизировать код -

это личное дело каждого. smile 

Автор: Mark4545 29.7.2007, 12:30
Ха а щас подумал над постом W4FhLF хороший способ , опробывал.
Вопрос решен, всем кто писал спс.

Автор: W4FhLF 29.7.2007, 12:41
Цитата(Mark4545 @  29.7.2007,  12:10 Найти цитируемый пост)
Просто используеться прагма ENTRY:/DllMain/NODEFAULTLIB/MERGE:.rdata=.textПоэтому ругаеться компилятор, без них как по маслу но размер большой. 


Практически весь CRT есть в ntdll(нужные тебе функции точно), поэтому ты себе лишние проблемы сам создаёшь. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)