我需要做的是以下内容。用户输入十六进制到十六进制阵列
const char *arrayHex[4];
for(int i = 0; i < 5; i++)
{
cin << uHex;
arrayHex[i] = uHex;
}
但我需要arrayHex的成员是十六进制与\ x转义。我该怎么做呢?
这是真的措辞含糊,编辑以固定(希望)
如果输入为41,我想在打印时为“A”的结果,因为如果该值是“\ X41”
我需要做的是以下内容。用户输入十六进制到十六进制阵列
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更不详细(对于MOST内置类型),尽管cout更灵活,因为您可以创建cout输出函数用于用户定义的类型。但是如果你的编译器没有执行printf()/ scanf()格式参数类型检查(GCC确实如果启用它),那么你可以很容易地创建一些令人感兴趣的混淆输出和不匹配类型,并创建很好的非确定性通过指定少于您的格式字符串指示的参数,SEGV生成器很容易。
不完全是我所需要的,我需要它被十六进制转义。例如,用户输入41,当我打印41保存到它的值时,打印出“A” – Michael
@Michael - 好吧,我改变了它以做我认为你现在要做的事。如果你没有意识到这一点,一个数字可以(并且实际上应该在大多数情况下)以纯数字(二进制)形式存储在计算机中,例如'int','long','unsigned int'等。作为std :: string或char []数组(直接或通过char *)存储的数字并不是真正的数字,就CPU而言。 CPU不能直接加/减/乘/除等存储为字符数字的数字。在其纯数字(二进制)形式中,数字不是“十进制”或“十六进制”,它只是纯数字。 – phonetagger
...数值只能以“十进制”或“十六进制”形式表示(即打印)。如果以“decimal”或“hex”形式(即在std :: string或char []/char *)中存储数字,则不会将其存储为CPU理解为数。然而,由于特定领域的原因,包括高精度科学/工程计算,数据库等,有时会使用其他存储格式(包括std :: string/char []/char *)。 – phonetagger
你的循环错了!你的数组只有4个元素,但你循环从i = 0到4,这是5 –
...和'arrayHex'是一个char指针数组。 'uHex'也是一个指针,或者你的意思是创建一个字符数组?如果后者,'const'应该被省略,因为你正在分配给该数组。 – eran
@Michael发布一个示例输入和输出? – anatolyg