将QString转换为unsigned char数组

时间:2014-02-18 14:58:22

标签: c++ arrays qt qstring unsigned-char

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

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

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'。

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

2 个答案:

答案 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;