c - 将数据从 Host App 发送到 Chrome 扩展

标签 c google-chrome-extension google-chrome-devtools chrome-native-messaging

下类后,当我激活扩展程序时,我可以运行扩展程序和主机应用程序,但每次我尝试接收数据时,我都无法确定。

这是我的代码:

int main(int argc, char* argv[]) {
    char message[] = "{\"t\": \"t\"}";

    unsigned int len = strlen(message);
    _setmode(_fileno(stdout), _O_BINARY);

    printf("%c%c%c%c", (char) 10, (char) 0, (char) 0, (char) 0);

    printf("%s", message);

    return 0;
}

我做错了什么?

最佳答案

%c 采用 int 参数(intrpretedunsigned char),而不是 char 。这可能/将导致打印错误的数据。此外,strlen 返回一个 size_t。您应该阅读所用函数的手册页。

重要提示:传递二进制值(而非字符)时,您应该使用 uint8_t 或 - 至少使用 unsigned char。请记住,char 可以是有符号的或无符号的,具体取决于实现。这可能会导致算术运算出现意外。

注意:

printf("%c%c%c%c", (char) 10, (char) 0, (char) 0, (char) 0);
printf("%s", message);

可以组合(删除强制转换):

printf("%c%c%c%c%s", 10, 0, 0, 0, message);

如果没有库支持,你应该考虑写一些函数来序列化一些基本类型,比如:

static void print_u32(uint32_t value)
{
    for ( size_t n = 0 ; n < 4 ; n-- ) {
        putc((unsigned char)value);  // still passing an int !
        value >>= 8;
    }
}

... print_string( ...

print_u32(strlen(message));
print_string(message);

请注意,_setmode 不是标准库函数。经过一番谷歌搜索后,它似乎是 Windows 也支持的 BSD 扩展(以防万一您希望该扩展具有可移植性)。

关于c - 将数据从 Host App 发送到 Chrome 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31565232/

相关文章:

c - 多态性(在 C 中)

javascript - Chrome API 警报在页面刷新后停止

google-chrome-extension - `chrome.*` 扩展 API 可以在内容脚本中使用吗?

javascript - javascript对象声明中的反引号

javascript - 了解 Chrome 堆配置文件

javascript - 如何在 Chrome 控制台中为对象数组着色

objective-c - 如何释放通过引用传递给 c 代码并且其成员已分配到那里的结构?

c++ - 将 int 转换为 ASCII 字符

google-chrome-devtools - 有没有办法在Chrome开发工具中将响应正文复制到剪贴板?

在 Unix 系统上使用时,Python Ctypes 函数调用段错误