【发布时间】:2021-01-01 06:05:41
【问题描述】:
我正在尝试将const unsigned char* 转换为QString,反之亦然。我设法将其转换为一个方向,但不是从QString 转换为const unsigned char*。我见过很多类似的问题,但没有一个解决方案适合我。
这是我的示例代码:
void f(const unsigned char* addr)
{
QString data = QString::fromLatin1((const char*)addr, len); //should work correctly
unsigned char* cc = new unsigned char[data.size()];
memcpy(cc, data.toStdString().c_str(), data.size()); //isn't working
}
我检查解决方案:在本例中为len = 8,因此:
data 包含:
unsigned char buff[8];
for (int i = 0; i < 8; i++)
buff[i] = cc[i];
//buff now contains [194,128,6,0,1,0,0,18]
unsigned char bb[8];
memcpy(bb, addr, 8);
//bb contains [128,6,0,1,0,0,18,0]
还有其他方法吗?感谢您的任何意见。
【问题讨论】:
-
对我来说看起来不错,是什么让你说它不起作用?
-
@john 不确定,但我认为这也不能解释空终止符。我宁愿建议
strcpy -
在您发布的代码中,无法知道它是否“有效”。也许您使用了调试器,这很好,但您需要告诉我们是什么让您得出结论认为它“不起作用”
-
了解什么是工作也会有所帮助,尤其是关于 nul 终止符,您可能想复制也可能不想复制。
-
我认为你需要添加一个minimal reproducible example 可能不考虑空终止符是问题。