用户输入十六进制到十六进制数组

时间:2012-06-28 18:57:20

标签: c++ hex

我需要做的是以下内容。

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

但我需要使用\ x对arrayHex的成员进行十六进制转义。我该怎么做呢?

这真的含糊不清,编辑修复(希望如此)

如果输入为41,我希望打印时的结果为“A”,就好像值为“\ x41”

1 个答案:

答案 0 :(得分: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()格式化的输出明显更具表现力(对于MOST内置类型),其冗长程度比cout更低,即使cout更灵活,因为你可以创建cout用户定义类型的输出函数。但是如果你的编译器没有执行printf()/ scanf()格式参数类型检查(如果你启用了GCC那么),那么你就可以轻松地创建一些有趣的&amp;将输出与不匹配的类型混淆,并通过指定比格式字符串指示的更少的args,非常容易地创建漂亮的非确定性SEGV生成器。