0

16 進数から 10 進数への変換関数を作成しています。入力は、16 進数に変換されて char として返される単一の文字です。ここに関数があります

char hex2dec(char inp)
{
    char out;
    cout << "inp:" << inp;

    if(inp >= '0' && inp <='9')
    {
        out = (inp - '0');
        cout << " out " << out;
    }
    else 
    {
        out = (toupper(inp) - 'A' + 10);
        cout << " out " << out;
    }

    return out;
}

関数に '0' と 'A' を渡すと、出力は inp:0 out inp:A out になります。つまり、何も出力されません。

私は問題を見つけることができません..誰か助けてくれますか?

4

4 に答える 4

2

実際に印刷しようとしているのは、印刷可能な文字ではないコード [0-15] の ASCII 文字です。つまり、15 を印刷したいのに、「\x0f」などを印刷します。

使用する:

cout << (int)out;

cout に、char ではなく int を印刷するメソッドを強制的に呼び出すようにします。これで問題が解決します。

..または「c++++っぽい」;-)

cout << static_cast(out);

..またはこれはほとんどの人にとって奇妙に見えます:

cout << int(アウト);

于 2013-10-31T13:15:56.963 に答える
0

std::stringstreamこの目的のために使用するだけです。

#include <iostream>
#include <sstream>

int main (int argc, char ** argv)
{
  // use hex formatting
  std::stringstream stream;
  stream << std::hex << 'A';

  // retrieve value of the hex input character
  int value;
  stream >> value;
  std::cout << value << std::endl; // prints 10

  // reset the stream
  stream.str ();
  stream.clear();

  // also works for strings
  stream << "0xABC" << std::endl;
  stream >> value;
  std::cout << value << std::endl; // prints 2748

  return 0;
}
于 2013-10-31T13:16:27.290 に答える
0

print から 'A' を取得した理由は、out が char であり、'A' - 'A' + 10 の後、out は整数 10 ではなく 10 の ascii 値を持つ文字であるためです。 ascii値は「A」を取得する代わりに10です.asciiテーブルを確認した後、その文字はnullです。これは、出力に何も得られない理由を説明できます。

于 2013-10-31T13:22:12.183 に答える