gpt4 book ai didi

c++ - 使用 cat 将数据文件通过管道传输到 C++ 程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:56 25 4
gpt4 key购买 nike

我正在寻找一些帮助,将文件(16 位有符号小端整数原始数据)从命令行传输到我的程序:

cat data.dat | myprogram

然后它应该将数据转换为 16 位有符号整数。它适用于前 12 个值。第 13 个值是错误的,后面是零。

第二个问题是程序似乎只进入了一次while循环。

我正在使用 Windows + MinGW。

我的代码:

#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;
}

输出:

0
9621
-14633
-264
5565
-12288
9527
-7109
11710
6351
4096
-5033
5773
147
0
0
0
0

感谢您的帮助!

最佳答案

您可能会尝试使用 read() 而不是 >>> 运算符,后者通常用于格式化输入。检查实际读取了多少数据也很有用:

#include <iostream>
using namespace std;

#define DEFAULT_BUF_LENGTH (16 * 16384)

int main(int argc, char* argv[])
{
char buf[DEFAULT_BUF_LENGTH];

for(;;)
{
cin.read(buf, sizeof(buf));
int size = cin.gcount();
if (size == 0) break;

int16_t* data = (int16_t*) buf; //to int

for(int i=0;i<size/sizeof(int16_t);i++)
{
cout << hex << data[i] << endl;
}
}
return 0;
}

关于c++ - 使用 cat 将数据文件通过管道传输到 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31504990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com