标签: istream

C++从istream中读取二进制数据

我有一个 istream,我必须将其读入缓冲区。一旦遇到 eof,我找不到一种方法来找出 read_len 吗?我无法使用 get,因为我的文件没有分隔符。

似乎唯一的选择就是逐个字符地阅读它,这真的是唯一的选择吗?

char buffer[128];
while(is.good()) {
     is.read(buffer, sizeof(buffer));
     size_t read_len = sizeof(buffer);
     if (is.eof()) {
         read_len = xxxx;
     }
     process(buffer, read_len);
}
Run Code Online (Sandbox Code Playgroud)

c++ binary-data istream

1
推荐指数
1
解决办法
346
查看次数

从istream中读取

如何在不使用operator >>()的情况下从istream中提取数据(内容)?

c++ istream

0
推荐指数
1
解决办法
2947
查看次数

无法在cpp对象和头文件中使用istream

头文件

#ifndef IREADER_H
#define IREADER_H
#include <iostream>


class iReader {
public:
    iReader();
    iReader(istream *input);
    iReader(const iReader& orig);
    virtual ~iReader();
private:
    Pixel *pixelData;
    char *cData;
    istream *input;
};

#endif  /* IREADER_H */
Run Code Online (Sandbox Code Playgroud)

.cpp文件

#include <iostream>
#include <fstream>
#include "Pixel.h"
#include "iReader.h"

iReader::iReader() {

}

iReader::iReader(istream *input){

}

iReader::iReader(const iReader& orig) {
}

iReader::~iReader() {
}
Run Code Online (Sandbox Code Playgroud)

(对不起,如果我没有正确复制代码)

所以这是我的代码.我正在创建一个新对象,我只是能够传入一个istream指针,并且有一个istream指针变量.它在netbeans中出错,说"无法解析标识符istream".它在我的主文件中工作正常,但不在此对象中.

c++ object istream

0
推荐指数
1
解决办法
947
查看次数

获取IPv6标头的确切大小,包括扩展标头

如果IPv4有问题并且我想从std :: istream中提取IP和ICMP头,首先我得到最初的20个字节,然后检查IPv4头中提供的头长度是否大于20个字节以便提取任何选项.下一个字节是ICMP数据包.使用IPv4标头内携带的标头长度值,我可以看到IP标头的预期大小.

但是如何获得IPv6标头的确切大小?IPv6标头内部有一个有效负载值,包括标头扩展的大小以及更高级别的数据,如ICMP.我需要知道IPv6头的大小,包括头扩展但没有更高级别的数据,以便知道ICMPv6头在std :: istream中的起始位置.

谢谢!

networking ipv4 ipv6 istream icmp

0
推荐指数
1
解决办法
2399
查看次数

为什么我的代码不能识别空白行C++

我看一下这个例子,关于istream get从文件流中提取字符的方法.

基本上,我不希望我的程序读取一个空行,但它跳到下一行并给出一个错误,它无法读取下一行 - 当它真的不应该读取空白行.

无论如何,这是我遵循的教程http://www.cplusplus.com/reference/istream/istream/get/这是我的代码

is.get(c)
if(c == '\0')
{
  cout << "Blank line" << endl;
}
else
{
 is.getline(...);
}

ignore whitespace...
is.getline(...);
Run Code Online (Sandbox Code Playgroud)

c++ get getline istream

0
推荐指数
1
解决办法
58
查看次数

C++:读取没有扩展名的文件

我有一些文件类型为"文件"我的意思是代替"资源\ sample.txt",他们的名字是"资源\样本"现在我想用c ++读取它们并将它们存储在一个字符串中.这是我的代码:

std::stringstream textBuffer;
std::fstream fileHandle;
std::string content
fileHandle.open("Resource\sample", std::ios::in);
textBuffer << fileHandle.rdbuf();
content = textBuffer.str();
fileHandle.close();
Run Code Online (Sandbox Code Playgroud)

但是当我编译它时,"content"变量的值等于"".帮助我.提前致谢.请注意,唯一的问题是文件没有任何扩展名,例如.txt或.dat或.bin.

c++ fstream file istream ostream

0
推荐指数
1
解决办法
646
查看次数

从std :: istream读取时,是否有比reinterpret_cast <char*>更好的选项?

我有以下代码:

std::istream is;
// ... stream initialization ... 
while(is)
{
  uint32_t next4Bytes = 0;
  is.read(reinterpret_cast<char*>(&next4Bytes), 4);
  if(next4Bytes == 218893066)
  {
    is.seekg(-4, std::ios_base::cur);
    break;
  }
  else
    is.seekg(-3, std::ios_base::cur);
}
Run Code Online (Sandbox Code Playgroud)

有没有比reinterpret_cast<char*>从4个字节读std::istream入更好的方法uint32_t?(显然不是c式演员)

c++ binaryfiles istream readfile

0
推荐指数
2
解决办法
269
查看次数

失败后的呐喊

我有一小段代码来读取用户数据,如下所示:

#include<iostream>
#include<vector>
#include<algorithm>
#include<ios>
#include<iomanip>
#include<string>

using namespace std;

istream& read_dt(istream& in, vector<int>& nmbr) {
if(in) {
 nmbr.clear();

 int x;
  while(in >> x) {
   nmbr.push_back(x);
  }
  if(in.fail()) {
   string s;
   in >> s;
   in.clear();
  }
 }
 return in;
}

int main() {
 vector<int> data;
 cout << "Enter all the data: " << endl;
 read_dt(cin, data);
 cout << "Size: " << data.size() << endl;
}
Run Code Online (Sandbox Code Playgroud)

当我使用以下数据编译并执行上述程序时:1 2 3 4 rt 5 6 7

我似乎得到了一个大小为4而不是大小为7的向量.我在上面实现的是,当用户将无效输入作为数据(在这种情况下为'r'和't')时,该数据被丢弃并且输入被清除(使用in.clear()),其余输入被"推"到矢量数据中.

但这似乎并没有发生.我究竟做错了什么?有人可以帮忙吗?

谢谢.

c++ istream

0
推荐指数
1
解决办法
1508
查看次数

如何告诉 stringstream 忽略空终止字符?

有什么方法可以告诉字符串流忽略空终止字符并读取一定数量的字符吗?

正如您从这个最小示例中看到的,即使 char 数组由 3 个字符组成,字符串流也会在第二个位置终止:

#include <sstream>
#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {
        char test[3];
        test[0] = '1';
        test[1] = '\0';
        test[2] = '2';

        stringstream ss(test);

        char c;
        cout << "start" << endl;
        while (ss.get(c)) {
                cout << c << endl;
        }

        if (ss.eof()) {
                cout << "eof" << endl;
        }
}
Run Code Online (Sandbox Code Playgroud)
$ ./a.out 
start
1
eof
Run Code Online (Sandbox Code Playgroud)

c++ istream

0
推荐指数
1
解决办法
1533
查看次数

如何通过数组的多个索引执行 &gt;&gt; std::skipws &gt;&gt; ?

假设您有std::array<int, SIZE> a,并且您已将 的每个元素保存a到一个文件中,在一行中用空格分隔。然后你想用via读取它们std:istream& is

is >> std::skipws >> a[0] >> a[1] >> a[2] >> ... >> a[SIZE-1];
Run Code Online (Sandbox Code Playgroud)

对于 的任何值,如何通用地编写此代码SIZE。尽管还有其他简单的方法可以做到这一点,但我很好奇如何使用这种特定方法来完成它。

c++ iterator fstream istream

0
推荐指数
1
解决办法
48
查看次数

从'int'类型的表达式获取类型'std :: istream&'的引用的无效初始化

我正在尝试创建一个使用有理数字并对它们执行运算符重载的类.我在程序的一部分,即输入流上遇到问题.

例如,我应该以"12/8"格式输入,它应该将12存储到变量a中,然后将8存储到变量b中.

这是我的代码:

istream& operator>>( istream& In, Rational& Item )
{
    char division_sign;
    int a,b;

    In >> a >> division_sign;
    if (division_sign != '/' || !In.good())
    {
        In.setstate( ios::failbit );
    }
    else
    {
        In >> b;
        if (b != 0 || !In.good())
        {
        return Item.numerator_ = a, Item.denominator_ = b;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误:

In function 'std::istream& operator>>(std::istream&, Rational&)':
131: error: invalid initialization of reference of type 'std::istream&' from expression of type 'int'
Run Code Online (Sandbox Code Playgroud)

Line 131return声明

c++ compiler-errors istream

-1
推荐指数
1
解决办法
1980
查看次数

如何将ifstream转换为istream

有什么方法可以转换ifstream成一个istream?我有一个函数调用getToken(istream* br),接受一个istream作为参数,但在我main()使用an ifstream来读取文件,我必须使用它ifstream来调用getToken.我怎样才能克服这个问题?

c++ casting istream ifstream

-1
推荐指数
1
解决办法
575
查看次数