【发布时间】:2015-07-16 20:30:20
【问题描述】:
我实际上正在阅读 Erlang C and Erlang: Erlang Port example 中的互操作性教程,我想知道 c 程序是如何工作的:
函数 read_exact(byte *buf, int len) 从标准输入准确读取 len 个字节并将它们放入 buf,但我不明白 read_cmd 做了什么
read_cmd(byte *buf)
{
int len;
if (read_exact(buf, 2) != 2)
return(-1);
len = (buf[0] << 8) | buf[1];
return read_exact(buf, len);
}
尤其是这一行
len = (buf[0] << 8) | buf[1];
我们举个例子: 如果我们运行程序并将 12 放入输入 12 以 ASCII 编码,因此 buf[0]=0x31 和 buf[1]=0x32 然后 len =0x3132 等于十进制的 12549 然后我们将 len 传递给 read_exact,这意味着我们必须读取 12549 个字节。 这有意义吗?
【问题讨论】: