将带有无效字符的Hex-CString转换为long?

时间:2018-03-19 13:02:01

标签: c++ type-conversion hex c-strings

我使用函数strtol将Hex-CString转换为long。

CString data = "A";
TCHAR *end = NULL;
long value = strtol(data, &end, 16);
乍一看,一切看起来都很好。 " A"成为10," AC"变为172和" ACC"变成了2764.你所期待的一切。 不幸的是,如果只有CString的开头是有效的十六进制值,strtol也会转换该值。

" ACCUMULATOR"也变成了2764!

我该如何防止这种情况?

或者我如何检查我的CString是否是有效的十六进制数?

1 个答案:

答案 0 :(得分:2)

检查是否*end == '\0'。这意味着解析了整个字符串,直到空终止符。

如果是ACCUMULATOR,则会指向字符U。因此,您可以找到字符串有效的点