首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C读取(从标准输入)在0x1a字符处停止

问C读取(从标准输入)在0x1a字符处停止
EN

Stack Overflow用户
提问于 2012-10-18 04:08:29
回答 3查看 2.8K关注 0票数 1

目前,我正在为原始数据(如jpg等)实现Burrows-Wheeler变换(和逆变换)。在文本文件等普通数据上进行测试时,不会出现任何问题。但是当涉及到读取jpg文件时,例如,它停止读取字符0x1a,也就是替代字符。我一直在互联网上寻找不需要依赖操作系统的代码,但没有结果的解决方案……我正在考虑以二进制模式读取stdin,但我猜这并不是很容易。有什么简单的方法可以解决这个问题吗?

代码:

代码语言:javascript
复制
buffer = (unsigned char*) calloc(block_size+1,sizeof(unsigned char));
length = fread((unsigned char*) buffer, 1, block_size, stdin);
if(length == 0){
    // file is empty
}else{
    b_length = length;
    while(length == b_length){
        buffer[block_size] = '\0';
        encodeBlock(buffer,length);
        length = fread((unsigned char*) buffer, 1, block_size, stdin);      
    }
    if(length != 0){            
        buffer[length] = '\0';
        encodeBlock(buffer,length);
    }
}
free(buffer);
EN

回答 3

Stack Overflow用户

发布于 2012-10-18 04:25:55

如果不依赖于操作系统,则无法执行此操作。C语言规范规定(7.19.3)

在程序启动时,预定义了三个文本流...

stdin是一个文本流。根据您的操作系统,可能有一些方法可以更改现有流的模式或访问低级流数据,但您声称不需要任何特定于操作系统的代码。

票数 3
EN

Stack Overflow用户

发布于 2012-10-18 04:10:09

您必须将该文件作为二进制文件打开。

使用类似于

代码语言:javascript
复制
fopen("file", "rb");
票数 1
EN

Stack Overflow用户

发布于 2012-10-18 04:25:08

您可以使用_setmode将标准输入转换为二进制模式。

还有freopen --请参阅this SO question

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12942518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档