如何将消息从Chrome扩展发送到本机应用程序
How to send message FROM Chrome extension TO Native app?
我有一个用c++编写的本地应用程序。
我可以使用"如何将消息从本机应用程序发送到chrome扩展?"?
但我无法找到另一种方法。
Chrome文档。states:Chrome在一个单独的进程中启动每个本机消息主机,并使用标准输入(stdin)和标准输出(stdout)与之通信。相同的格式用于向两个方向发送消息:每条消息都使用JSON进行序列化,UTF-8编码,并以32位消息长度(按本机字节顺序)开头
如何从chrome扩展发送的stdin读取/解释数据?
如何读取4字节长度的信息以及发送的UTF-8编码的其余数据?
请帮忙!
谢谢!
正如有人在评论中提到的,如果长度大于255,所提供的解决方案将不起作用。例如,如果实际长度为296(二进制0000000 1 00101000),则前面提出的解决方案将产生41=>0000000 1+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()在执行与当前长度值的位OR之前返回转换为无符号int的int(int有一个为sign保留的位,无符号int没有)。
现在,我不确定这里可能出现的潜在的大/小endian问题,因为我还没有在不同的体系结构上测试过这个解决方案。我希望有更多经验的人可以对此发表评论。
从stdin:读取json数据
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int length = 0;
//read the first four bytes (=> Length)
for (int i = 0; i < 4; i++)
{
length += getchar();
}
//read the json-message
string msg = "";
for (int i = 0; i < length; i++)
{
msg += getchar();
}
}
相关文章:
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 使用本机 C++ 应用程序中的 C# 代码
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- 它是否需要为webrtc本机应用程序中的每个对等体提供单独的rtc::Runnable线程和PeerConnection
- 用于创建使用XML中定义的GUI的C 本机应用程序的库
- 如何在本机 c++ 应用程序上通过 WP8 认证 6.5.1
- 安卓 |在Genymotion模拟器上调试本机应用程序
- 用于本机C++应用程序的GUI库
- 如何从终端为本机应用程序创建android项目
- 在Visual Studio 2015中调试本机应用程序加载的托管DLL
- 使用OpenCV 3.1在Android Studio 1.5中开发本机C++应用程序
- Tizen IDE中的本机应用程序:签名崩溃并打印奇怪的非ASCII字符
- Android本机应用程序命令行参数
- 如何将消息从Chrome扩展发送到本机应用程序
- 是否可以从本机应用程序调用 Java 代码
- 如何在Chrome原生消息传递扩展的本机应用程序中使用本机主机消息
- C#库到本机C++应用程序
- Label-BB10本机应用程序中允许的最大Qstring长度
- 我需要root权限才能在Android下执行本机应用程序
- 在本机应用程序中使用win32