Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 阅读及;用Qt解释二进制文件_C++_Qt_Hex_Qbytearray - Fatal编程技术网

C++ 阅读及;用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位

试图在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位小数

以下是我的代码片段:

  • 读取文件:

    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

    搜索后我尝试了各种方法,但似乎没有任何效果,这表明我的代码中缺少一些基本的东西

    当前执行转换的代码是:decimal

    QByteArray::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我想你不在乎零?编辑。