2008-12-02 23 views

cevap

6

Bir TCHAR dizisini veya bunun başlamak için bir işaretçi varsa, onunla çalışmak için std::basic_istringstream kullanabilirsiniz:

std::basic_istringstream<_TCHAR> ss(argv[x]); 
int number; 
ss >> number; 

Şimdi number dönüştürülen sayıdır. Bu ANSI modunda çalışacaktır (_TCHAR, char'a yazılmıştır) ve Unicode'da (_TCHAR, söylediğiniz gibi wchar_t için yazılmıştır) modda çalışacaktır.

3

TCHAR, ANSI ve Unicode için çalışan bir karakter türüdür. MSDN belgelerine bakın (Windows üzerinde olduğunuzu varsayalım), atoi ve tüm temel dize işlevleri için TCHAR eşdeğerleri var (strcpy, strcmp vb.)

atoi() için TCHAR eşdeğeri _ttoi() 'dir. . Yani bu yazabiliriz:

#include <sstream> 
#include <iostream> 

using namespace std; 

typedef basic_istringstream<_TCHAR> ITSS; 

int _tmain(int argc, _TCHAR *argv[]) { 

    ITSS s(argv[0]); 
    int i = 0; 
    s >> i; 
    if (s) { 
     cout << "i + 1 = " << i + 1 << endl; 
    } 
    else { 
     cerr << "Bad argument - expected integer" << endl; 
    } 
} 
+1

çok platformda ses gelmiyor ... –

1

Ben şahsen stringstreams kullanmak istiyorsunuz, burada başlangıç ​​için bazı kod geniş karakter argv değerleriyle çalışmanızı sağlamalıyım

#include <iostream> 

#ifdef WINDOWS 
# define TCLAP_NAMESTARTSTRING "~~" 
# define TCLAP_FLAGSTARTSTRING "/" 
#endif 
#include "tclap/CmdLine.h" 

int main(int argc, _TCHAR *argv[]) { 
    int myInt = -1; 
    try { 
    TCLAP::ValueArg<int> intArg; 
    TCLAP::CmdLine cmd("this is a message", ' ', "0.99"); 
    cmd.add(intArg); 
    cmd.parse(argc, argv); 
    if (intArg.isSet()) 
     myInt = intArg.getValue(); 
    } catch (TCLAP::ArgException& e) { 
    std::cout << "ERROR: " << e.error() << " " << e.argId() << endl; 
    } 
    std::cout << "My Int: " << myInt << std::endl; 
    return 0; 
} 
1

Kuru kodlu ve Windows üzerinde geliştirmek değil, ama TCLAP kullanarak bu,:

int value = _ttoi(argv[1]); 
İlgili konular