我有一个用 C++ 编写的 native 应用程序。
我可以使用 How to send message FROM native app TO Chrome extension? 将数据从我的 native 应用程序发送到 Chrome 扩展程序
但我无法找出其他方法。
Chrome 文档。状态:Chrome 在单独的进程中启动每个 native 消息传递主机,并使用标准输入 (stdin) 和标准输出 (stdout) 与其进行通信。双向发送消息使用相同的格式:每条消息均使用 JSON、UTF-8 编码进行序列化,并以 native 字节顺序显示 32 位消息长度。
如何从标准输入读取/解释由 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/