我有一个用 C++ 编写的本机应用程序。
我可以使用以下命令将数据从本机应用程序发送到 chrome 扩展如何从本机应用程序向 Chrome 扩展程序发送消息? https://stackoverflow.com/questions/18134665/how-to-send-message-from-native-app-to-chrome-extension
但我无法找出其他方法。
Chrome 文档。状态 :Chrome 在单独的进程中启动每个本机消息传递主机,并使用标准输入 (stdin) 和标准输出 (stdout) 与其进行通信。双向发送消息使用相同的格式:每条消息均使用 JSON、UTF-8 编码进行序列化,并以本机字节顺序显示 32 位消息长度。
正如有人在评论中提到的,如果出现以下情况,提供的解决方案将不起作用长度大于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 则没有)。
现在,我不确定此处可能出现的潜在大/小端问题,因为我尚未在不同的体系结构上测试此解决方案。希望有更多经验的人能够评论一下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)