回复: QString 转QBytearray 出错??
#11 回 fsu0413 的帖子 [foxgod 07-09 22:16]
fsu0413:哦对,还有一种情况,就是你的结构体里可能有非POD的数据,举另外一个例子
struct {
QString x;
};
这种是不能直接传bytearray的
....... (2019-07-09 22:13)
我的结构体里面目前只有int类型,没有字符
我只这样做的
struct {int a;int b; // 这玩意是真正的字符串int c;} str;
str object;
object.a = 1;
object.b =2;
object.c=3;
char* st1 = (char*)&object;
QByteArray st2 = QByteArray (st1,sizeof(str));
#12 回 20091001753 的帖子 [foxgod 07-09 22:44]
20091001753:QByteArray 的数据,转换成用字符表达,是 toHex,反之 fromHex
但是这与 QString::toUtf8 又是有区别的
hex 是把16进制的数据用字符表达,utf8 是文本编码
....... (2019-07-09 20:44)
我只这样做的
struct {
int a;
int b; // 这玩意是真正的字符串
int c;
} str;
str object;
object.a = 1;
object.b =2;
object.c=3;
char* st1 = (char*)&object;
QByteArray st2 = QByteArray (st1,sizeof(str));
QString st3 = st2;
QByteArray st4 = st3.toLocal8Bit();
转回来就错了,请教下这样做有问题吗??
#13 [dbzhang800 07-09 23:32]
如果你贴的代码不是示意代码,而是你真的测试代码,那么暴露的问题有点多
1. 第一行 QByteArray 构造时,里面含有 "\x00",这代表C字符串的结束,之后的东西都被截断了
2. 第四行 str1 使用UTF8转换成QString,前提是str1是有效的utf8字符串,但你这显然不是
再之后的已经没意义了
#14 回 dbzhang800 的帖子 [foxgod 07-10 08:46]
dbzhang800:如果你贴的代码不是示意代码,而是你真的测试代码,那么暴露的问题有点多
1. 第一行 QByteArray 构造时,里面含有 "\x00",这代表C字符串的结束,之后的东西都被截断了
2. 第四行 str1 使用UTF8转换成QString,前提是str1是有效的utf8字符串,但你这显然不是
....... (2019-07-09 23:32)
结构体转char*,在转为QByteArray,是否可以转QString,在插入json里面呢??
#15 [dbzhang800 07-10 11:28]
QByteArray 和 QString 互转有无数种方式
如果你QByteArray中的字符不可控,而且QString只是个中转,只是为了稍后能转回QByteArray,那么latin1,latin2,latin3,... 等干这个事情都是安全的。gbk,utf8等干这个明显是不合适的。
如果QByteArray中字符不可控,先转成可控字符明显更简单,比如通过:QByteArray::toHex() 和 fromHex(),或者 fromBase64() 和 toBase64() ,或者 ....