将QString转换为unsigned char数组

sam*_*ode 3 c++ arrays qstring qt unsigned-char

我这里有一个非常基本的问题.我尝试了谷歌搜索一段时间,因为有很多类似的问题,但没有一个解决方案适合我.

这是一个显示问题的代码段:

QString test = "hello";
unsigned char* test1 = (unsigned char*) test.data();
unsigned char test2[10];
memcpy(test2,test1,test.size());
std::cout<<test2;
Run Code Online (Sandbox Code Playgroud)

我尝试将QString放入unsigned char数组中,但我得到的输出总是只是'h'.

谁能告诉我这里出了什么问题?

4pi*_*ie0 5

问题在于QString.data()返回a 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
Run Code Online (Sandbox Code Playgroud)

分配

unsigned char* test1 = (unsigned char*) test.data();
Run Code Online (Sandbox Code Playgroud)

并试图复制

unsigned char test2[10];
memcpy(test2,test1,test.size());
Run Code Online (Sandbox Code Playgroud)

是错误的,因为QChar是16位实体,因此尝试复制它将因为0字节之后终止'h'.