QByteArray data; data.append(char("hall")); 为什么我用data.size()输出data的字节数,得到的是1,而不是4
时间: 2024-09-30 09:01:52 浏览: 20
在C++中,QByteArray是一个用于存储二进制数据的容器,它实际上是基于quint8类型的数组。当你使用`char("hall")`将字符串"hall"传递给append函数时,Qt库会将其视为一个单字符序列,因为"C"字符串实际上是在内存中按照ASCII编码存储的,每个字符占用1个字节。
"hall"这个字符串在ASCII编码下分别是'h'(0x68)、'a'(0x61)、'l'(0x6c)和'l'(0x6c),所以四个字符合并在一起占用的就是4个字节。然而,由于你直接用了一个字符操作符(char()),这使得`char("hall")`返回的是第一个字符'h',因此`data.size()`输出的是1,表示只添加了1个字节。
如果你想存储整个字符串"hall",你需要这样做:
```cpp
QByteArray data;
data.append('h');
data.append('a');
data.append('l');
data.append('l');
```
这样`data.size()`才会输出4,因为你已经明确地将每个字符逐个添加到了QByteArray中。
相关问题
QByteArray .data 和 .data_ptr 有什么区别
QByteArray::data() 返回指向 QByteArray 中存储的数据的一个指针,该指针是 const char* 类型的。这个指针可以被用来读取 QByteArray 中的数据,但是不能用来修改 QByteArray 中的数据。
QByteArray::data_ptr() 返回一个指向 QByteArray 中存储数据的指针,该指针是 char* 类型的。这个指针可以被用来读取和修改 QByteArray 中的数据。但是需要注意的是,如果 QByteArray 被重新分配了内存,则原始指针将不再指向正确的位置,因此必须小心使用。
总之,如果只需要读取 QByteArray 中的数据,使用 data() 是安全的。如果需要修改 QByteArray 中的数据,则必须使用 data_ptr()。
QByteArray data = ContentStr.toLatin1();
这是将ContentStr字符串转换为QByteArray类型的操作。具体来说,将ContentStr字符串的Unicode字符编码转换为Latin-1字符编码,并将结果存储在QByteArray类型的变量data中。
在这一行代码中,ContentStr是一个QString类型的字符串变量,toLatin1()是QString类提供的一个方法,用于将Unicode字符编码转换为Latin-1字符编码。该方法返回一个QByteArray类型的字节数组,表示转换后的结果。因此,通过将ContentStr字符串调用该方法,可以将其转换为QByteArray类型的字节数组。
需要注意的是,Latin-1字符编码是一种单字节字符编码,用于表示ISO 8859-1字符集中的字符。在转换为Latin-1编码后,ContentStr字符串中的每个字符都被编码为一个字节,因此QByteArray类型的变量data中存储的是ContentStr字符串的字节表示形式。
阅读全文