【问题标题】:Convert Hex-CString with invalid characters to long?将具有无效字符的 Hex-CString 转换为 long?
【发布时间】: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


【解决方案1】:

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

对于ACCUMULATOR,它将指向字符U。因此,您可以找出字符串有效的时间点

【讨论】:

  • 还要事先检查data是否不为空,因为空字符串strotol会返回0*end也会是'\0'
猜你喜欢
  • 2015-08-23
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 2010-10-21
相关资源
最近更新 更多