C++ Sto cercando un aiuto tubazioni un file (a 16 bit firmato little endian numeri interi dati grezzi) dalla riga di comando per il mio programma:Tubazioni un file di dati con il gatto a un programma
cat data.dat | myprogram
Poi dovrebbe convertire i dati in interi con segno a 16 bit. Funziona per i primi 12 valori. Il 13 ° valore è sbagliato, seguito da zero.
Il secondo problema è che il programma sembra entrare nel ciclo while solo una volta.
Sto usando Windows + MinGW.
My Code:
#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;
}
uscita:
0
9621
-14633
-264
5565
-12288
9527
-7109
11710
6351
4096
-5033
5773
147
0
0
0
0
Grazie per il vostro aiuto!
possibile duplicato di [tubazioni per l'ingresso/uscita] (http://stackoverflow.com/questions/17508626/piping-for-input-output) –
Controllare [this] (http://stackoverflow.com/a/1599093/4074081) discussione. Su Windows, lo stdin viene aperto in modalità testo e un determinato byte indica la fine del file, la soluzione è riaprirlo in modalità binaria. – dewaffled
Non è possibile usare '>>' converte le terminazioni di riga. Devi usare ** input non formattato ** funzioni come 'cin.read()'. http://en.cppreference.com/w/cpp/io/basic_istream – Galik