相关疑难解决方法(0)

C读二进制stdin

我正在尝试构建一个指令管道模拟器,我开始时遇到很多麻烦.我需要做的是从stdin读取二进制文件,然后在操作数据时以某种方式将其存储在内存中.我需要一个接一个地读取正好32位的块.

我如何一次读取32位的块?其次,我如何存储它以便以后操作?

这是我到目前为止所做的,但是检查我进一步阅读的二进制块,它看起来不正确,我不认为我正在读取我需要的32位.

char buffer[4] = { 0 }; // initialize to 0
unsigned long c = 0;
int bytesize = 4; // read in 32 bits
while (fgets(buffer, bytesize, stdin)) {
  memcpy(&c, buffer, bytesize); // copy the data to a more usable structure for bit manipulation later
  // more stuff
  buffer[0] = 0; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0; // set to zero before next loop
}
fclose(stdin);
Run Code Online (Sandbox Code Playgroud)

我如何一次读取32位(它们都是1/0,没有换行等),我将它存储在char[]哪里,可以吗?

编辑:我能够读取二进制文件,但没有一个答案产生正确顺序的位 - 它们都被破坏了,我怀疑字节顺序和读取问题并且一次移动8位(1个字符) - 这个需要在Windows和C上工作......?

c binary stdin

20
推荐指数
3
解决办法
3万
查看次数

使用ios :: binary从标准读取

我试图从标准输入读取并通过其十进制值区分每个字符.根据我的理解,换行符(10)和回车符(13)将被解释为相同的字符.我想区分这两者.我知道如果我正在读取文件,我可以使用ios :: binary参数打开它.但是如果我从标准输入读取怎么办?

c++ binary stdin stream cin

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

读取超过127个ASCII值时,C++ cin失败

我创建了一个包含256个字符的文本文件,文本文件的第一个字符是ASCII值0,文本值的最后一个字符是ASCII值255.两者之间的字符均匀地从0到255递增.因此字符#27是ASCII值27.字符#148应该是ASCII值148.

我的目标是阅读此文本文件的每个字符.

我试过读这个cin.我试过cin.get()cin.read(),这两者都应该读无格式输入.但是在阅读第26个角色时都失败了.我想当我用过时unsigned char,cin说它是读书255,这根本不是真的.当我使用普通签名时char,cin表示正在阅读-1.无论ASCII的等价字符26是什么,都应该读取.或许cin认为它受到了打击EOF?但我之前阅读过单独的StackOverflow帖子,这些帖子EOF不是一个可以写的实际角色.所以我迷失了为什么cin咳嗽表示整数-1或整数的字符值255.有人可以告诉我我做错了什么,为什么,最好的解决方案是什么,为什么?

粘贴的具体代码不多.我已经尝试了一些不同的非工作组合都涉及要么cin.get()cin.read()与任一charunsigned char和呼叫强制转换为charint之间.我没有运气能够读过第26个角色,除此之外:

unsigned char character;

while ( (character = (unsigned char)cin.get()) != EOF) { ... }
Run Code Online (Sandbox Code Playgroud)

虽然有趣的是,虽然这并没有阻止我在第26个字符的while循环,但它也不会继续前进.看起来cin,它是否cin.get()还是cin.read()只是拒绝前进到下一个字符检测的东西它不喜欢的时刻.我也知道cin.ignore()存在类似的东西,但我的输入是不可预测的; 也就是说,我的文本文件的这256个字符只是一个测试用例,真正的输入是相当随机的.这是较大的家庭作业的一部分,但这个具体问题与作业无关; 我只是坚持了部分流程.

注意:我正在读取标准输入流,而不是特定的文本文件.似乎仍然没有直接的解决方案.我无法相信以前没有这样做过cin …

c++ cin character-encoding

6
推荐指数
2
解决办法
2766
查看次数

通过输入重定向读取二进制文件c ++的最佳方法

我试图stdin在运行时读取一个大型二进制文件思想输入重定向(),并且stdin是必需的.

./a.out < input.bin
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经使用了fgets.但是fgets会跳过空白和换行.我想包括两者.我currentBuffersize可以动态变化.

FILE * inputFileStream = stdin; 
int currentPos = INIT_BUFFER_SIZE;
int currentBufferSize = 24; // opt
unsigned short int count = 0; // As Max number of packets 30,000/65,536
while (!feof(inputFileStream)) {
    char buf[INIT_BUFFER_SIZE]; // size of byte
    fgets(buf, sizeof(buf), inputFileStream);
    cout<<buf;
    cout<<endl;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c++ stdin stream cin

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

标签 统计

c++ ×3

cin ×3

stdin ×3

binary ×2

stream ×2

c ×1

character-encoding ×1