【发布时间】:2018-08-28 01:17:44
【问题描述】:
我使用函数 strtol 将 Hex-CString 转换为 long。
CString data = "A";
TCHAR *end = NULL;
long value = strtol(data, &end, 16);
乍一看,一切看起来都很好。 “A”变成了 10,“AC”变成了 172,“ACC”变成了 2764。一切都是你所期望的。 不幸的是,如果只有 CString 的开头是有效的十六进制值,strtol 也会转换该值。
“累加器”也变成了 2764!
我怎样才能防止这种情况发生?
或者如何检查我的 CString 是否为有效的十六进制数?
【问题讨论】:
-
当你告诉他们它是一个他们可以转换的字符串时,图书馆调用往往会相信你。
-
只要对结果进行逆运算,看是否和原来一样
-
您可能会发现阅读参考资料对您有所帮助:en.cppreference.com/w/c/string/byte/strtol
标签: c++ type-conversion hex c-strings