Hex到Int的转换在不同环境中表现不同

时间:2014-03-28 11:24:10

标签: c++ linux qt qt-creator

这段代码在QtCreator(Windows 7)上运行良好,但在基于Linux的嵌入式平台上运行时表现不同,我不知道如何开始调试它。

以下是相关代码:

QByteArray c(1, char(0x00));
bool bOk = false;
int intVal= c.toHex().toInt(&bOk,16);
if(bOk) {
    qDebug() << "conversion success \t" << intVal;
}
else {
    qDebug() << "conversion failed \t" << intVal;
}

在QtCreator中(在Windows中运行),这很正常,intVal的值为0,正如预期的那样。

但是,在嵌入式Linux环境中编译和运行时,转换失败并且bOk为false。

奇怪的是c = 0xFF它在两种环境中都能正常工作。

详细

Qt版本:4.7

环境1:Windows

  • 操作系统:Windows 7
  • 环境:Qt-Creator
  • sizeof(int)= 4个字节
  • 处理器:这是一台配备Intel Pentium Core-2 Duo的旧机器(不幸的是我不记得确切的型号)。它们都是x86体系结构,但是它们将是小端的。

环境2:Linux

  • 操作系统:自定义嵌入式Linux(不确定版本或如何查找)
  • 环境:在此目标上运行的交叉编译程序。
  • sizeof(int):4个字节
  • 处理器Endianess:ARM7,因此BE-32 Endianess(根据this answer

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你说的是在Linux上使用BE-32 Endian(大端字不变性),而在英特尔处理器上使用的是小端。

您还需要1个字节并使用toInt()将其转换为2,然后再将其转换为Hex

我无法自行调试,我猜测使用不同的endian进行转换可能是问题所在,所以建议使用endian转换例程,如documented here

您可以在these answers中了解不同的字节序。