我有一个用 C++ 编写的 native 应用程序。
我可以使用 How to send message FROM native app TO Chrome extension? 将数据从我的 native 应用程序发送到 chrome 扩展程序
但我想不出其他办法。
Chrome 文档。声明:Chrome 在单独的进程中启动每个本地消息传递主机,并使用标准输入 (stdin) 和标准输出 (stdout) 与其通信。相同的格式用于双向发送消息:每条消息都使用 JSON、UTF-8 编码进行序列化,并以 native 字节顺序的 32 位消息长度开头。
如何从 stdin 读取/解释由 chrome 扩展程序发送的数据?
如何读取 4 字节长度的信息以及正在发送的 UTF-8 编码的其余数据?
请帮忙!
谢谢!
最佳答案
正如评论中提到的那样,如果长度大于 255,所提供的解决方案将不起作用。例如,如果实际长度为 296(二进制 00000001 00101000),前面给出的解决方案将产生 41 => 00000001 + 00101000 = 1 + 40 = 41。
必须考虑读取的字节数。在这个例子中,计算长度的正确方法是 1*(2^8) + 40 = 296。所以正确的解决方案可能是:
unsigned int length = 0;
//read the first four bytes
for (int i = 0; i < 4; i++) {
int read_char = getchar();
length += read_char * (int) pow(2.0, i * 8);
}
下面介绍了基于位和位操作移位的更好解决方案(可能有点难理解,但肯定更简洁):
unsigned int length = 0;
for (int i = 0; i < 4; i++) {
unsigned int read_char = getchar();
length = length | (read_char << i * 8);
}
重要的是要注意 getchar() 返回的 int 在执行位 OR 与当前长度值之前转换为 unsigned int(int 为符号保留一位,unsigned int 没有)。
现在,我不确定这里可能出现的潜在大/小端问题,因为我还没有在不同的架构上测试过这个解决方案。我希望有更多经验的人可以对此发表评论。
关于c++ - 如何将消息从 Chrome 扩展程序发送到 native 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20211166/