将单个字节写入QDataStream

1 io qt4

我想写一系列字节给a QDataStream.在十六进制编辑器中查看时,我希望生成的文件如下所示:

0x DEAD
Run Code Online (Sandbox Code Playgroud)

我的尝试看起来像这样:

QFile file("test.txt");
file.open(QIODevice::WriteOnly);
QDataStream stream(&file);
stream << ((char)0xDE);
stream << ((char)0xAD);
file.close();
Run Code Online (Sandbox Code Playgroud)

当我test.txt用十六进制编辑器打开时,我可以看到,而不是将它们写为单个字节,DataStream已将它们填充为全字,文件如下所示:

0x FFFF FFDE FFFF FFAD
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

小智 6

QIODevice左移运算符(<<)没有char原语的重载定义,所以它会将它转换为int.

它确实有qint8类型的定义.将代码更改为这样可以修复输出:

stream << ((qint8) 0xDE);
stream << ((qint8) 0xAD);
Run Code Online (Sandbox Code Playgroud)