十六进制到整型的转换在不同的环境中表现不同

Conversion of Hex to Int behaves differently in different environments

本文关键字:环境 整型 转换 十六进制      更新时间:2023-10-16

这段代码在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为假。

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

详细信息

Qt Version: 4.7

环境1:Windows

  • 操作系统:Windows 7
  • Environment: Qt-Creator
  • sizeof(int) = 4 bytes处理器:这是一台带有英特尔奔腾Core-2双核的旧机器(不幸的是我不记得确切的型号)。但它们都是x86架构,所以这将是小端。

环境2:Linux

  • 操作系统:自定义嵌入式Linux(不确定哪个版本或如何查找)
  • 环境:在此目标上运行的交叉编译程序。
  • sizeof(int): 4 bytes
  • 处理器端序:ARM7,所以这是BE-32端序(根据这个答案)

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

在将其转换为十六进制之前,您还使用toInt()将1字节转换为2字节

由于无法自己调试,我猜这里的问题可能是使用不同端序的转换,因此建议使用端序转换例程,如这里所述。

你可以在这些答案中看到不同的端序