【发布时间】:2015-10-15 18:14:14
【问题描述】:
我正在寻求一些帮助,将文件(16 位有符号小端整数原始数据)从命令行传输到我的程序:
cat rawdata.dat | myprogram
代码在 Linux 上运行良好,每循环 512 个字节转换为 256 个整数。
如果我在 Windows 上使用 MinGW 编译它,只有前 76 个值会被正确转换。程序也会在第一个 while 循环后停止。
有人知道我做错了什么吗?我正在使用 Windows 7 64bit + MinGW 编译器。
代码:
#include <iostream>
using namespace std;
int main()
{
int BUF_LEN = 512;
char buf[BUF_LEN];
while(!cin.eof())
{
cin.read(buf, BUF_LEN);
int16_t* data = (int16_t*) buf; //to int
for(int i=70;i<85;i++)
{
cout << i << " " << data[i] << endl;
}
}
return 0;
}
测试文件: http://www.filedropper.com/rawdata
正确的值是:
70 -11584
71 13452
72 -13210
73 -13331
74 13893
75 10870
76 9738
77 6689
78 -253
79 -1009
80 -16036
81 14253
82 -13872
83 10020
84 -5971
【问题讨论】:
-
关于
while(!cin.eof()),give this link a read。 -
注意:在 Windows 中,二进制 8 位值 0x1A(或十进制 26)表示文件结束,除非您以“二进制”形式打开文件(即没有翻译)。
-
顺便说一句,二进制文件最好直接打开,而不是通过
cin。就个人而言,我永远不会将二进制文件通过管道传输到我的程序中。太多的事情可能会出错。
标签: c++ linux windows pipe cat