【问题标题】:Conversion from QString to hex从 QString 转换为十六进制
【发布时间】:2014-02-24 09:42:04
【问题描述】:

我在 2 个不同的项目中有相同的代码。 Qstring::number(data.toLong(&ok,2),16) 在一个项目中有效,而在另一个项目中则无效。有谁知道可能是什么原因?代码如下

1) unsigned short status;
2) long int setting;
3) bool ok;
4) QString data_selected;
5) data_selected = lineEdit_data->text();  //get the binary value
6) data_selected = QString::number(data_selected.toLong(&ok, 2), 16); //convert binary     value to hex value
7) setting = data_selected.toLong(&ok, 16); //convert string to integer

在第 5 行,我从 lineEdit 获取数据。这条线工作正常。我刚刚插入了一个新的文本编辑框并在那里显示了数据,在那里我可以看到数据。我的数据为“1000000000001000”。然后我执行第 6 行,它的输出在第一种情况下是“8008”,在另一个项目中是“0”。这就是问题。代码完全相同。我已经复制粘贴了。但是在调试中我可以看到这种差异。请问谁能告诉我为什么会这样?

【问题讨论】:

  • 零结果表示toLong 转换失败。最好拆分第 6 行以查看 toLong 返回的内容并检查 ok 变量。在第 nr 6 行中,我还将使用 trimmed() 方法去除任何白色字符(以防万一)。添加有关使用的 Qt 版本和平台的信息。
  • data_selected 的原始值是多少?还要检查转换后ok 的值。
  • @Marek:这应该是命令吗? QString::number(data_selected.trimmed().toLong(&ok, 2), 16);
  • @弗兰克:data_selected = "1000000000001000"

标签: qt qstring qt4.8


【解决方案1】:

我认为答案下的评论很清楚。
像这样正确的代码来检测问题所在:

ulong setting;
bool ok;
data_selected = data_selected.trimmed(); // first try without this line
ulong value = data_selected.toULong(&ok, 2);
if (ok) {
    data_selected = QString::number(value, 16);
    setting = data_selected.toULong(&ok, 16);
} else {
    data_selected = "convertion error";
}

【讨论】:

  • 额外空间导致了问题。感谢您的回答。它有帮助。
猜你喜欢
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
相关资源
最近更新 更多