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

Convert Hex-CString with invalid characters to long?

我使用函数 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 是否是有效的十六进制数?

检查是否 *end == '[=10=]'。这意味着整个字符串都被解析了,直到 null-terminator.

ACCUMULATOR的情况下,会指向字符U。因此,您可以找出字符串有效的点