簡體   English   中英

將標准 output 重定向到 pipe 然后從中讀取不同長度的整數

[英]Redirecting standard output to pipe and then reading different length integers from it

我已將程序的標准 output 重定向到 pipe。 唯一的 output 是隨機的 0 - 10^9 整數,最多 10 位。 在另一個程序中,我正在閱讀 pipe。

現在,我的問題是處理接收到的數據。 如果我定義長度為 10 + 1 的char緩沖區,那么如果發送的數字少於 10 位,則數據開始變得混亂。 我收到某種垃圾,額外的零等。

由於標准的 output 將數據作為文本發送,所以我不能使用int作為緩沖區,因為它只需要 4 個字節所以前 4 位數字並削減了 rest 的數字;

我的問題是:有沒有可能的解決方案?

我打印了緩沖區的 output。 我已經發送了 10x 1000 ,結果是:
31 30 30 30 0a 31 30 30 30 0a 31
30 30 30 0a 31 30 30 30 0a 31 30
30 30 0a 31 30 30 30 0a 31 30 30
30 0a 31 30 30 30 0a 31 30 30 30
0a 31 30 30 30 0a 0a 31 30 30 30

因此,所有行都按預期具有 11 個字節。 但是中間的第1行有回車,然后出現下一個數字。 我猜算術計算字節直到回車,然后將接下來的幾個字節作為一個數字,直到另一個回車會變得有點難看。

也許我采取的方式是錯誤的,比如問題沒有明確的解決方案,最好采取另一種方法? 我的目的是為 C++ 應用程序編寫一個測試程序。 測試儀逐行發送數據,然后也逐行從C++程序中取出output,檢查返回的output是否正確。 C++ 應用程序僅通過標准輸入/output 獲取輸入數據,這是主要限制。 用其他語言很容易做到這一點,但我猜這里有點亂。

看起來您的數據是每行一個數字(用0x0a分割行)。 因此,只需一次讀取一行。

int main()
{
    std::string line;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM