将具有无效字符的 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
。因此,您可以找出字符串有效的点
我使用函数 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
。因此,您可以找出字符串有效的点