将标准输出重定向到管道,然后从中读取不同长度的整数



我已经将程序的标准输出重定向到管道。唯一的输出是0-10^9个随机整数,最多10位。在另一个程序中,我正在阅读管道。

现在,我的问题是处理接收到的数据。如果我将char缓冲区定义为长度10+1,那么如果发送的数字少于10位,则数据开始变得混乱。我收到一些垃圾,额外的零等

由于标准输出将数据作为文本发送,所以我不能使用int作为缓冲区,因为它只占用4个字节,所以前4位数字和其余数字都会被剪切;

我的问题是:有可能的解决方案吗?

我打印了缓冲区的输出。我已经发送了10个1000,结果是:
31 30 30 30 0a 31 30 30 30a 31
30 30 30 a 31 30 30a

因此,所有行都有11个字节。但在中间的第1行有一个回车,然后出现下一个数字。我想,计算字节数直到回车,然后将接下来的几个字节作为一个数字直到另一个回车的算法会有点难看。

也许我采取的方式是错误的,比如没有明确的解决方案,最好采取另一种方法?我的意图是为C++应用程序编写一个测试程序。测试仪逐行发送数据,然后逐行从C++程序中获取输出,并检查返回的输出是否正确。C++应用程序仅通过标准输入/输出获取输入数据,这是主要限制。用其他语言很容易做到这一点,但我想这里有点混乱。

看起来您的数据是每行一个数字(使用0x0a来拆分行(。所以一次只需读一行。

int main()
{
std::string line;
while(std::getline(std::cin, line)) {
std::cout << "Got Line: " << line << "n";
}
}

最新更新