簡體   English   中英

在unicode C ++應用程序中解析命令行參數

[英]Parsing command line arguments in a unicode C++ application

如果應用程序是unicode,如何解析傳遞給應用程序的整數作為命令行參數?

Unicode應用程序有這樣的主要:

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

argv [?]是一個wchar_t *。 這意味着我不能使用atoi。 如何將其轉換為整數? stringstream是最好的選擇嗎?

如果你有一個TCHAR數組或指向它的開頭的指針,你可以使用std::basic_istringstream來處理它:

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

現在, number是轉換后的數字。 這將工作在ANSI模式(_TCHAR是typedef'ed到char )和Unicode(_TCHAR是typedef`ed到wchar_t,如你所說)模式。

TCHAR是一種適用於ANSI和Unicode的字符類型。 查看MSDN文檔(我假設您在Windows上),atoi和所有基本字符串函數(strcpy,strcmp等)都有TCHAR等價物。

atoi()的TCHAR等價是_ttoi()。 所以你可以這樣寫:

int value = _ttoi(argv[1]);

干編碼,我不在Windows上開發,但使用TCLAP ,這應該讓你運行寬字符argv值:

#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;
}

我個人會使用stringstreams ,這里有一些代碼可以幫助你入門:

#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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM