作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含以 UTF-8 编码的特殊字符 (µ) 的 QString:
QString data = "197,45 \xc2\xb5m";
我需要通过 Linux 管道将该字符串发送到另一个程序。我试图将字符串转换成这样的东西:
char msg[15];
for(int i = 0; i < data.length(); i++) {
msg[i] = data.toUtf8()[i];
}
msg[data.length()] = '\0';
我将 msg
发送到管道,但我只收到“197,45 µ”,而不是“197,45 µm”。我尝试读取读取端的数据:
char data[15];
read(fd, data, nbytes);
我不太了解字符/字符串转换,所以如果您能解释我应该如何处理这个问题,我将很高兴。谢谢。
最佳答案
您所做的似乎主要是将数据“序列化”到二进制管道中,因此一个有意义的选项是使用专为此目的设计的 QDataStream
。
类似于:
QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);
QString data = "197,45 \xc2\xb5m";
stream << data;
sendToPipe(buffer.constData(), buffer.size());
另一边也类似,使用operator>>
从流中读取数据。
QByteArray buffer(dataPtr, size);
QDataStream stream(buffer);
QString data;
stream >> data;
关于c++ - 如何将带有特殊字符的QString转换成字节流通过Linux管道发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64987745/
我是一名优秀的程序员,十分优秀!