char* 和 QByteArray相互转换遇到的问题总结(转)()

har* 转QByteArray

如果这样写

char RECV[10]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’k’,’l’};QByteArray DataContent = QByteArray(RECV);

这样得到的结果又可能是错的,需要这样写

char RECV[10]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’k’,’l’}; QByteArray DataContent = QByteArray(RECV,10) QByteArray转 char*

如果是这样

strcpy(rebackData,DataContent.data());字符串赋值没问题,结构体赋值就出错了。

strcpy字符串复制,不仅会复制其字符串就连其结尾的字符‘\0’也会被复制过去,其复制遇到\0后就结束了;

而memcpy就不一样了,他是内存复制,他不仅可以复制字符串还可以复制任意内容,如字符串数组,结构体等;而且memcpy并不会遇到\0就结束,而是复制你在第三个参数中指定的字节数。

相对而言,memcpy要比strcpy用途要广泛的多,一般我们只需要复制字符串就可以选择strcpy,但是数组或者结构体,那就不要犹豫了,直接上memcpy吧。

memcpy_s,strcpy_s函数明确的指定了目标内存的大小,能够清晰的暴露出内存溢出的问题,而普通的strcpy,memcpy则不会。为了保证内存拷贝有足够的空间,防止笔误,尽量使用memcpy_s代替memcpy。原文链接:https://blog.csdn.net/foxgod/article/details/91811057

————————

har* 转QByteArray

如果这样写

char RECV[10]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’k’,’l’};QByteArray DataContent = QByteArray(RECV);

这样得到的结果又可能是错的,需要这样写

char RECV[10]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’k’,’l’}; QByteArray DataContent = QByteArray(RECV,10) QByteArray转 char*

如果是这样

strcpy(rebackData,DataContent.data());字符串赋值没问题,结构体赋值就出错了。

strcpy字符串复制,不仅会复制其字符串就连其结尾的字符‘\0’也会被复制过去,其复制遇到\0后就结束了;

而memcpy就不一样了,他是内存复制,他不仅可以复制字符串还可以复制任意内容,如字符串数组,结构体等;而且memcpy并不会遇到\0就结束,而是复制你在第三个参数中指定的字节数。

相对而言,memcpy要比strcpy用途要广泛的多,一般我们只需要复制字符串就可以选择strcpy,但是数组或者结构体,那就不要犹豫了,直接上memcpy吧。

memcpy_s,strcpy_s函数明确的指定了目标内存的大小,能够清晰的暴露出内存溢出的问题,而普通的strcpy,memcpy则不会。为了保证内存拷贝有足够的空间,防止笔误,尽量使用memcpy_s代替memcpy。原文链接:https://blog.csdn.net/foxgod/article/details/91811057