正如你可能已经从标题中找到的那样,我在转换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)
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)
我自己没有尝试过这个问题,看它是否有效,但它从Qt文档中看起来就像你想要一个QDataStream一样.这支持提取所有基本C++类型,并且可以使用QByteArray作为输入创建.
| 归档时间: |
|
| 查看次数: |
40322 次 |
| 最近记录: |