2016-10-06 3 views
1

Я хочу преобразовать TCHAR в int, но когда я его конвертирую, я получаю значение ASCII для значения int, а не числа.Как преобразовать TCHAR в int

Код:

#include "stdafx.h" 
#include <Windows.h> 
#include <iostream> 
#include <string> 

using namespace std; 

int converttoint() 
{ 
    TCHAR tchar[2]; 
    wcscpy_s(tchar, TEXT("5")); 

    int i = tchar[0]; 

    cout << i << endl; 

    return i; 
} 

int main(int argc, _TCHAR* argv[]) 
{ 
    converttoint(); 

    string in; 
    cin >> in; 
} 

Output: 53 

Но я хочу я быть 5.

Как это можно сделать?

+5

Как насчет вас используете '_ttoi'. –

+1

Не используйте TCHAR больше, это не 90-е. Но если вы делаете @GillBates, это правильно. –

+1

'TCHAR' не является стандартной версией C++. –

ответ

2

Если вы хотите, чтобы преобразовать строку (содержащую целое число) к int, вы можете использовать некоторые функции C, как atoi() (для char ANSI строк) или _wtoi() (для wchar_t Unicode UTF-16 строк), или другие, которые берут языковой стандарт в качестве дополнительного входного параметра: вы можете прочитать больше на this MSDN documentation.

Если вы хотите использовать модель TCHAR, то соответствующие функции: _tstoi() или _ttoi(), как описано на вышеупомянутой странице документации MSDN.

1

Вы можете просто сделать это по старой школе и взять «0», это работает, потому что цифры будут упорядочены, принимая ascii в качестве примера 53 - десятичное значение для «5», а 48 - десятичное значение для «0» ', и поэтому, принимая наши значения неявного литья, (53-48) равно десятичному значению 5. Что-то вроде: int i = tchar[0] - '0'; будет работать.

+0

Ваше предположение соответствует стандарту. '' 5 '-' 0'' всегда будет возвращать '5'. – NathanOliver

+0

@NathanOliver Отредактировано, чтобы включить и пример того, почему работает «5» - «0». – George

+0

Я бы не полагался на ascii. Я бы включил стандарты. C++ может использовать другие наборы символов, такие как EBCDIC – NathanOliver

Смежные вопросы