我需要做的是以下。
const char *arrayHex[4];
for( int i = 0; i < 5; i++ )
{
cin << uHex;
arrayHex[i] = uHex;
}
但我需要 arrayHex 的成员用 \x 进行十六进制转义。我该怎么做呢?
这真的措辞模糊,编辑修复(希望如此)
如果输入是 41,我希望打印时的结果是“A”,就好像值是“\x41”
#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 做,如果你启用它),那么你可以很容易地创建一些有趣且令人困惑的输出与不匹配的类型,并创建很好的非确定性通过指定比格式字符串指示的更少的参数,SEGV 生成器非常容易。