我需要做的是以下内容。
const char *arrayHex[4];
for( int i = 0; i < 5; i++ )
{
cin << uHex;
arrayHex[i] = uHex;
}
但我需要使用\ x对arrayHex的成员进行十六进制转义。我该怎么做呢?
这真的含糊不清,编辑修复(希望如此)
如果输入为41,我希望打印时的结果为“A”,就好像值为“\ x41”
答案 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生成器。