【发布时间】:2010-10-10 21:43:26
【问题描述】:
我想从二进制文件中读取无符号字节。 于是我写了如下代码。
#include <iostream>
#include <fstream>
#include <vector>
#include <istream>
std::string filename("file");
size_t bytesAvailable = 128;
size_t toRead = 128;
std::basic_ifstream<unsigned char> inf(filename.c_str(), std::ios_base::in | std::ios_base::binary) ;
if (inF.good())
{
std::vector<unsigned char> mDataBuffer;
mDataBuffer.resize(bytesAvailable) ;
inF.read(&mDataBuffer[0], toRead) ;
size_t counted = inF.gcount() ;
}
这会导致读取始终为 0 字节,如变量 counted 所示。
网络上似乎有参考资料说我需要设置语言环境才能完成这项工作。我不清楚如何做到这一点。
相同的代码使用数据类型“char”而不是“unsigned char”
上面使用 unsigned char 的代码似乎可以在 Windows 上运行,但在 colinux Fedora 2.6.22.18 中运行失败。
我需要做什么才能让它在 linux 上工作?
【问题讨论】:
-
不是问题的答案,而是相关的。请记住,C++ 中字符串类的定义是
typedef basic_string<char> string;,因此您始终可以像typedef basic_string<unsigned char> bytestring;一样创建无符号字符字符串类。 -
是的,但我想读取 BINARY 文件
-
.read() 和 .write() 可用于二进制/文本,流运算符 > 仅用于文本文件。计算机上的所有数据最终都是二进制的,这是您选择解释它的方式。
-
如果你想“二进制”使用 uint8_t... 忽略它是 unsigned char 的 typedef 别名。
-
这个问题已经在这里解决了:stackoverflow.com/q/19205531/331024 它有一个完整的实现 char_traits
和 codecvt
标签: c++ file-io stream ifstream