下类后,当我激活扩展程序时,我可以运行扩展程序和主机应用程序,但每次我尝试接收数据时,我都无法确定。
这是我的代码:
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
参数(intrpreted 为 unsigned 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/