QByteArray为整数

Ahm*_*med 10 qt bytearray

正如你可能已经从标题中找到的那样,我在转换QByteArray为整数时遇到了问题.

 QByteArray buffer = server->read(8192);
 QByteArray q_size = buffer.mid(0, 2);
 int size = q_size.toInt();
Run Code Online (Sandbox Code Playgroud)

但是,size为0. buffer没有收到任何ASCII字符,我相信toInt()如果它不是ASCII字符,该函数将不起作用.本int size应该是37(0x25),但-正如我已经说过-这是0.

q_sizeIS 0x2500(或其它端序顺序- 0x0025).

这有什么问题?我很确定能q_size保存我需要的数据.

Rop*_*pez 25

这样的东西应该工作,使用数据流从缓冲区读取:

QDataStream ds(buffer);
short size; // Since the size you're trying to read appears to be 2 bytes
ds >> size;

// You can continue reading more data from the stream here
Run Code Online (Sandbox Code Playgroud)

  • 我想应该提到那些来自谷歌的人 - 如果你需要转换一个小端数组,请使用`ds.setByteOrder(QDataStream :: LittleEndian)` (8认同)

sth*_*sth 9

toInt如果QByteArray包含带数字的字符串,则该方法解析int .您希望将原始位解释为整数.我不认为有这样的方法QByteArray,所以你必须自己从单个字节构造值.可能这样的东西会起作用:

int size = (static_cast<unsigned int>(q_size[0]) & 0xFF) << 8
         + (static_cast<unsigned int>(q_size[1]) & 0xFF);
Run Code Online (Sandbox Code Playgroud)

(或者相反,取决于Endianness)


Tro*_*our 8

我自己没有尝试过这个问题,看它是否有效,但它从Qt文档中看起来就像你想要一个QDataStream一样.这支持提取所有基本C++类型,并且可以使用QByteArray作为输入创建.


小智 8

bool ok;
q_size.toHex().toInt(&ok, 16);
Run Code Online (Sandbox Code Playgroud)

为我工作