gpt4 book ai didi

c++ - 在 C++ 中处理标准输入中的空字符

转载 作者:行者123 更新时间:2023-11-30 05:36:48 25 4
gpt4 key购买 nike

我正在为使用 native 主机消息传递的 Chrome 编写一个扩展程序。目标是让 Chrome 在应用程序模式下运行时在操作系统默认浏览器中打开链接。 Chrome 通过管道实现 native 主机消息传递到 native 应用程序的标准输入和标准输出。这一切都很好,我已经得到了与 native 应用程序对话的扩展。我遇到的问题是前 4 个字节的数据包含以下字符串的长度,对于我来说,它总是包含空字符。示例 strace 如下所示。处理这个问题的最佳方法是什么?我想使用 cin 或 getline 之类的东西,如果可能的话,它们会暂停程序直到收到输入。

Process 27964 attached
read(0, "~\0\0\0\"http://stackoverflow.com/qu"..., 4096) = 130
read(0,

这是当前的 C++ 代码。我尝试过使用 cin.get 和 fgets 的变体,但它们不会等待输入,Chrome 会在循环运行异常后终止程序。

#include <string>
#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
for(;;) {
string message;
cin >> message;
if(!message.length()) break;
string cmd(string("xdg-open ") + message);
system(cmd.c_str());
}
return 0;
}

最佳答案

据我了解here ,长度应该是 native 字节顺序,所以你的编译器使用相同的 CPU 架构相同的字节顺序:

each message is serialized using JSON, UTF-8 encoded and is preceded with 32-bit message length in native byte order.

这意味着您可以先阅读长度:

uint32_t len;  
while (cin.read(reinterpret_cast<char*>(&len), sizeof (len))) // process the messages
{
// you know the number of bytes in the message: just read them
string msg (len, ' '); // string filled with blanks
if (!cin.read(&msg[0], len) )
/* process unexpected error of missing bytes */;
else /* process the message normally */
}

关于c++ - 在 C++ 中处理标准输入中的空字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33451997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com