QByteArray与QString中的size()函数的区别

今天处理一个tcp传输自定义结构体数据的问题,在数据的传输中自定义了报头报尾,报头包括了报文内容的长度。一开始传输的都是英文数据,没有出现任何问题。

在实际应用测试中,发现当存在中文时不能匹配长度

通过对日志的分析,发现报头中存储的size与报文的实际size不一致

原因是,报文中保存的是通过QByteArray::size()算出的大小,而解析的时候却是用的QString::size()算出的大小

如下是两种格式下size()函数的介绍:

QByteArray与QString中的size()函数的区别

QByteArray与QString中的size()函数的区别

大概意思就是:QByteArray::size()返回的是字节数,而QString::size()返回的是字符数。因此当有汉字的时候,一个字符≠一个字节。因此,在传输的时候一定要保持一致。

 

欢迎大家指教,希望大家喜欢

路漫漫其修远兮,同志仍须努力