我基本上试图让用户通过输入十六进制输入 getline into a string,因为我将对此进行其他操作。 (使用c ++ .net的东西不起作用)
我不想将其分解为每个人的字符,然后遍历字符串中的每个字符,看看它是否在[0-9]或[Aa-Ff]的范围内。
相反,我想知道是否有任何人知道的酷功能或更好的方法。我知道strtoul函数,但它返回一个很长的。这将迫使我然后我猜它将它传递给一个流,使其再次回到一个字符串。
另一件很长的事情我不确定我是否要担心64位长和32位长。我正在使用英特尔处理器在linx盒子上开发它,但它可以在unix盒子上使用,其处理器可能是64位我不确定。
所以我想这里有两个问题。任何帮助都是最受欢迎的
我可以得到答案: 你还可以评论我关于漫长的第二个问题吗?即使我现在不必担心...如果我使用32位系统保存一个长的变量....会改变(我想这样长度的大小应该在64位处理器上改变)这对变量中保存的信息意味着什么?第二,为了避免整个小/大端的事情,我把它保存在一个长期的思考中,因为它的种类注册不会是移植的问题。我认为这是错误的吗?
感谢
答案 0 :(得分:2)
检查每个字符是唯一的方法,句号。
但是,您可能对 isxdigit(int character)感兴趣,如果传递的字符不是有效的十六进制字符,则返回0(请注意,x不包含在有效字符中)。 / p>
你可以使用算法测试它是否是一行中的十六进制字符串,虽然它有点难看。如果你正在使用Boost,你可以通过使用boost :: bind来实现它。
此代码段所需的标头是< locale>,< functional>和< algorithm&gt ;.
bool is_hex_string(std::string& str) {
return std::count_if(str.begin(), str.end(),
std::not1(std::ptr_fun((int(*)(int))std::isxdigit))) > 0;
}
答案 1 :(得分:0)
int val;
scanf("%x", &val);
? (不会检查整行是否有效。)
答案 2 :(得分:0)
if(sscanf(string,“%x”,& val)!= 1) //在这里处理你的错误