十六进制到整型的转换在不同的环境中表现不同
Conversion of Hex to Int behaves differently in different environments
这段代码在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字节
由于无法自己调试,我猜这里的问题可能是使用不同端序的转换,因此建议使用端序转换例程,如这里所述。
你可以在这些答案中看到不同的端序
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 将长整型值打印为带有前导零的十六进制
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 将整型常量映射到类型
- 将元组和整型实例合并到引用元组中
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 为什么C++不允许两个同名的函数/类模板,区别仅在于非类型模板参数(整型)的类型?
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 直接初始化无符号短整型的标准行为
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 无符号和有符号短整型的位宽
- 将整型转换为浮点型时检测溢出
- 环礁和(长整型)的区别?
- 为什么允许将整型、枚举和指向成员的指针类型reinterpret_cast到自身?
- 将逗号格式化为长整型整数
- 十六进制到整型的转换在不同的环境中表现不同