-1

コマンドラインから文字列を読み取っています。

プログラム名 0102030405060708

argv[1]タイプですchar *argv[]

よりargv[1]0102030405060708

これは、16 進表現で 8 文字のリストとして使用されることになっています。
私がしなければならないことは、この値を取得して、その部分に分割することです。すなわち

01、02、03、04 ...

そして、それらを16進値として使用します。

基本的に01, 02, 03....、16進数で表す文字を取得する必要があります

これを行う方法がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

2

文字列を分割して 2 文字の長さのトークンで作業するか、メモリを節約して (この場合の余分な 16B は重要ではありませんが、適切な方法です)、「その場で」行うことができます。私が言及した2番目の方法についてのみ説明します。

その文字列を反復処理し、一度に 2 文字ずつ進めるループが必要です。2 文字の数値を実際の文字に変換する反復ごとに、その方法のヒントは、乗算演算子と、それらの数値が使用している数値システムの基数 (この場合は 16) を使用することです。

各反復の結果を保存して後で印刷することも、より便利な方法として、反復ごとに印刷することもできます。

于 2013-07-18T21:46:34.973 に答える
0

私があなたを正しく理解していると仮定すると、文字列ストリームでこれをかなりきちんと行うことができると思います。

std::stringstream stream(argv[1]);
std::string twochars;
while (stream >> std::setw(2) >> twochars) {
  int num;
  std::stringstream twocharstream(twochars);
  twocharstream >> std::hex >> num;
  // Do something with the number here
}

一度に 2 文字を文字列twocharsにストリーミングすることから始めます。hex次に、マニピュレータを使用して整数にストリーミングし、16 進数として変換する 2 つの文字から別のストリームを作成します。

数字で表される文字が必要な場合 (つまり、41 は文字 'A' です)、次のように簡単に実行できます。

char c = num;
于 2013-07-18T22:12:25.500 に答える