szukam jakiejś pomocy potokiem plik (16-bitowa mały endian liczby całkowite dane surowe) z linii komend do mojego programu:Rurociągi plik danych z kotem do C++ programu
cat data.dat | myprogram
Następnie powinien przekonwertować dane na 16-bitowe liczby całkowite ze znakiem. Działa dla pierwszych 12 wartości. 13. wartość jest błędna, a następnie zera.
Drugi problem polega na tym, że program wydaje się wchodzić w pętlę while tylko raz.
Używam Windows + MinGW.
mój kod:
#include <iostream>
using namespace std;
#define DEFAULT_BUF_LENGTH (16 * 16384)
int main(int argc, char* argv[])
{
char buf[DEFAULT_BUF_LENGTH];
while(cin >> buf)
{
int16_t* data = (int16_t*) buf; //to int
for(int i=0;i<18;i++)
{
cout << data[i] << endl;
}
}
return 0;
}
wyjścia:
0
9621
-14633
-264
5565
-12288
9527
-7109
11710
6351
4096
-5033
5773
147
0
0
0
0
Dzięki za pomoc!
możliwe duplikat [orurowanie dla wejścia/wyjścia] (http://stackoverflow.com/questions/17508626/piping-for-input-output) –
Sprawdź [this] (http://stackoverflow.com/a/1599093/4074081) dyskusja. W systemie Windows stdin jest otwierany w trybie tekstowym, a określony bajt wskazuje koniec pliku, rozwiązaniem jest ponowne otwarcie go w trybie binarnym. – dewaffled
Nie można użyć '>>' konwertuje zakończenia linii. Musisz użyć ** niesformatowanych wejściowych ** funkcji, takich jak 'cin.read()'. http://en.cppreference.com/w/cpp/io/basic_istream – Galik