我在这里有一个非常基本的问题。我尝试了谷歌搜索一段时间,因为有很多类似的问题,但没有一个解决方案适合我。
这是一个显示问题的代码段:
QString test = "hello";
unsigned char* test1 = (unsigned char*) test.data();
unsigned char test2[10];
memcpy(test2,test1,test.size());
std::cout<<test2;
我尝试将QString放入unsigned char数组中但是 我得到的输出总是'h'。
谁能告诉我这里出了什么问题?
答案 0 :(得分:5)
问题在于,QString.data()
会返回QChar*
,但您需要const char*
QString test = "hello";
unsigned char test2[10];
memcpy( test2, test.toStdString().c_str() ,test.size());
test2[5] = 0;
qDebug() << (char*)test2;
^^^
this is necessary becuase otherwise
just address is printed, i.e. @0x7fff8d2d0b20
作业
unsigned char* test1 = (unsigned char*) test.data();
并尝试复制
unsigned char test2[10];
memcpy(test2,test1,test.size());
是错误的,因为QChar
is 16 bit entity因此试图复制它会因为'h'
之后的0字节而终止。
答案 1 :(得分:3)
在第二行中,您尝试将QChar*
投射到(unsigned char*)
这是完全错误的。
试试这个:
QString test = "hello";
QByteArray ba = test.toLocal8Bit();
unsigned char *res = (unsigned char *)strdup(ba.constData());
std::cout << res << std::endl;