c++ - 如何将带有特殊字符的QString转换成字节流通过Linux管道发送

标签 c++ c linux qt pipe

我有一个包含以 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/

相关文章:

c++ - 将 std::format 与自定义类型一起使用

c++ - Lib OPAL编译错误

c++ - QT 中的 SQLite CREATE 查询

c++ - C++类:编写函数的不同方法

regex - 需要使用正则表达式过滤掉有效的 IP 地址

linux - unix - 文件的头部和尾部

c - 增加字符串值的数字末尾

c - C99 结构中的函数重载

c - 在定义字符串大小 C 中使用#define

linux - Bash:从 chroot 和切换用户中执行命令