0

私がする必要があるのは次のとおりです。

const char *arrayHex[4];
for( int i = 0; i < 5; i++ )
{    
cin << uHex;
arrayHex[i] = uHex;
}

ただし、arrayHexのメンバーを\xで16進数でエスケープする必要があります。どうすればそれを行うことができますか?

これは本当に漠然とした言葉でした、修正するために編集してください(うまくいけば)

入力が41の場合、値が「\ x41」であるかのように、印刷時の結果を「A」にします。

4

1 に答える 1

0
#include <iostream>
#include <string>
#include <cstdlib> // for strtol()
#include <cstdio>  // for printf()
#define countof(array) (sizeof(array)/sizeof(array[0]))

int main()
{
    std::string uHex;
    long arrayValues[4];
    for( int i = 0; i < countof(arrayValues); ++i )
    {
        std::cin >> uHex;
        char* end;
        arrayValues[i] = std::strtol(uHex.c_str(), &end, 16);
        // At this point, we expect end to be pointing at the '\0'
        // (the C-string nul terminator).  If it's not, then we have
        // invalid chars in our input, and arrayValues[i] is bogus.
        if (*end != '\0')
        {
           std::cout << "Invalid characters: \"" << uHex << "\" (please try again)\n";
           --i; // compensate for the ++i above to re-try this again
        }
    }

    for( int i = 0; i < countof(arrayValues); ++i )
    {
        std::cout << i << " --> " << arrayValues[i] << " --> "
                  << static_cast<char>(arrayValues[i]) << '\n';
//      std::printf("%d --> %d --> %c\n", i, arrayValues[i], arrayValues[i]);
    }
}

coutまたはprintf()を使用して、まったく同じ出力を両方の方法で出力していることに注意してください。個人的には、printf()が好きなのは、それが最初に学んだことではなく、printf()形式の出力は、coutを作成できるため、coutの方が柔軟性が高いにもかかわらず、coutよりもはるかに表現力があり(ほとんどの組み込み型の場合)、冗長性が低いためです。ユーザー定義型の出力関数。ただし、コンパイラがprintf()/ scanf()フォーマットパラメータタイプチェックを実行しない場合(GCCを有効にすると、GCCが実行します)、タイプが一致しない興味深い出力を簡単に作成し、非決定論的な優れた出力を作成できます。フォーマット文字列が示すよりも少ない引数を指定することにより、SEGVジェネレーターは非常に簡単になります。

于 2012-06-28T20:06:38.490 に答える