C++ 阅读及;用Qt解释二进制文件
试图在Qt中读取二进制文件 该文件包含混合文本和二进制(十六进制)数据 该文件包含长度由十六进制数指定的数据区域 例如:C++ 阅读及;用Qt解释二进制文件,c++,qt,hex,qbytearray,C++,Qt,Hex,Qbytearray,试图在Qt中读取二进制文件 该文件包含混合文本和二进制(十六进制)数据 该文件包含长度由十六进制数指定的数据区域 例如: 001是00 00 00 01 此处“BE”位于文件中的偏移量BB处。BE是190,所以我向前滚动到上面的最后一个字节,我知道接下来的190个字节是我的数据 我已经挣扎了几天,试图让我的Qt代码将上面的字节值“BE”转换为数字190 我得到的最好的是“-66”,当然是190-256 另一个例子是: 00 01 D3 63 00 00 01 应转换为“63D3”,即25555位
001是00 00 00 01
此处“BE”位于文件中的偏移量BB处。BE是190,所以我向前滚动到上面的最后一个字节,我知道接下来的190个字节是我的数据
我已经挣扎了几天,试图让我的Qt代码将上面的字节值“BE”转换为数字190
我得到的最好的是“-66”,当然是190-256
另一个例子是:
00 01 D3 63 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 %d\n", c3, c3 );
ffffff be-66
我怎么才能把它读成190
搜索后我尝试了各种方法,但似乎没有任何效果,这表明我的代码中缺少一些基本的东西
当前执行转换的代码是:decimalQByteArray::at()
返回一个(有符号的)char
,并将其分配给一个无符号短字符。您希望将值0xbe视为无符号,因此应强制转换它:
c3=(无符号字符)iContents.at(2)代码>
对于2字节的小端整数(我假设您感兴趣的只是D363
,这里的零没有意义?)
unsigned short i=(unsigned char)i content.at(2)|(unsigned char)i content.at(3)太好了,非常感谢。请问,采用以下字节序列“D3 63 00 00”并将其更改为0x63D3的“正确”方法是什么。这是我问题的第二部分。我是这样想的:取字节1(D3)并转换它,然后第二个字节(63)并转换它,然后ans=num1+num2*(16^2),但这看起来真的很笨重。@TenG我想你不在乎零?编辑。