C++ 将包含无效字符的十六进制字符串转换为长字符?

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是否是有效的十六进制数?检查*

我使用strtol函数将十六进制字符串转换为长字符串

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'