C++ 将包含无效字符的十六进制字符串转换为长字符?
我使用strtol函数将十六进制字符串转换为长字符串C++ 将包含无效字符的十六进制字符串转换为长字符?,c++,type-conversion,hex,c-strings,C++,Type Conversion,Hex,C Strings,我使用strtol函数将十六进制字符串转换为长字符串 CString data = "A"; TCHAR *end = NULL; long value = strtol(data, &end, 16); 乍一看,一切都很好。“A”变为10,“AC”变为172,“ACC”变为2764。你所期望的一切。 不幸的是,如果CString的开头是有效的十六进制值,strtol也会转换该值 “累加器”也变成了2764 我怎样才能防止呢 或者如何检查我的CString是否是有效的十六进制数?检查*
CString data = "A";
TCHAR *end = NULL;
long value = strtol(data, &end, 16);
乍一看,一切都很好。“A”变为10,“AC”变为172,“ACC”变为2764。你所期望的一切。
不幸的是,如果CString的开头是有效的十六进制值,strtol也会转换该值
“累加器”也变成了2764
我怎样才能防止呢
或者如何检查我的CString是否是有效的十六进制数?检查
*end=='\0'
。这意味着整个字符串被解析,直到null终止符
对于
累加器
,它将指向字符U
。因此,您可以找出字符串在哪个点有效检查*end=='\0'
。这意味着整个字符串被解析,直到null终止符
对于
累加器
,它将指向字符U
。因此你可以找出字符串在哪一点是有效的当你告诉库调用他们可以转换字符串时,库调用倾向于相信你。只需对结果应用逆运算,并检查结果是否与原始结果相同。你可能会发现,阅读参考资料对你有帮助:库调用倾向于相信你告诉他们这是一个他们可以转换的字符串。只需对结果应用逆运算,并检查结果是否与原始结果相同。您可能会发现阅读参考资料对您将来有所帮助:还要检查数据是否事先为空,对于空字符串,strotol
将返回0
,*end
也将是'\0'
。还要检查数据
是否事先不为空,对于空字符串,strotol
将返回0
,*end
也将是'\0'
。