在Qt中读取和解释二进制文件
Reading & Interpreting Binary file in Qt
尝试在Qt中读取二进制文件。
文件包含混合文本和二进制(十六进制)数据。
文件包含的数据区域的长度由十六进制数字指定。
例如: 00 01 BE 00 00 00 00 00 00 00 00 00 01
这里"BE"在文件中的偏移量BB处。BE是190,所以我向前滚动到上面的最后一个字节,我知道接下来的190字节是我的数据。
我已经挣扎了几天试图让我的Qt代码将字节值"BE"转换为上面的数字190。
我得到的最好值是"-66",当然是190-256。
另一个例子是: 00 01 D3 63 00 00 00 00 00 00 00 01
应转换为"63D3",即25555十进制。
下面是我的代码片段:读取文件:
QFile file(iFile); if (!file.open(QIODevice::ReadOnly)) return; QByteArray iContents = file.readAll();
获取长度
ushort c3 = 0xFF; c3 = iContents.at(2); // c3 should be "BE" hex. printf ( "%0x %dn", c3, c3 );
输出为:
FFFFFFBE -66
怎么把它读成190?
我在搜索后尝试了各种各样的东西,但似乎没有任何工作,这表明我在我的代码中缺少一些基本的东西。
当前进行转换的代码是:decimal
QByteArray::at()
返回(带符号的)char
,并将其分配给unsigned short
。你希望值0xbe被视为无符号,所以你应该强制转换它:c3 = (unsigned char) iContents.at(2);
对于2字节的小端整数(我假设你只对D363
感兴趣,这里的零没有意义?):
unsigned short i = (unsigned char) iContent.at(2) | (unsigned char) iContent.at(3) << 8;
(unsigned char)
强制转换具有最高优先级,并且位操作符的操作数被提升为整数(这就是为什么移位结果不为零的原因)。
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 将内部带有矢量的结构保存/读取到二进制文件中
- 编译多个C++文件.调用二进制文件以运行代码
- 如何使用位字段将数据从二进制文件复制到结构中?
- uint8_t同一二进制文件的不同十进制值
- C++单个生成文件多个二进制文件
- 尝试将数字写入二进制文件时引发异常
- C++中读/写二进制文件
- 读取二进制文件并解释为整数
- 二进制文件解释
- 在Qt中读取和解释二进制文件