使用fstream写a时的空格
Posted
技术标签:
【中文标题】使用fstream写a时的空格【英文标题】:Blank spaces when using fstream to write a 【发布时间】:2016-11-07 17:04:21 【问题描述】:使用fstream在文件中写入字符串是在每个字母之间放置一个空格,我正在编写的字符串来自将二进制代码转换为ascii的函数:
void almacenar(string texto)
string temp;
string test = "hola";
string compreso ="";
remove("compreso.daar");
int textosize=texto.size();
int i = 0;
while (i<textosize)
while(temp.size()!=8)
temp=temp+texto[i];
i++;
if (i>=textosize)
break;
compreso=compreso+bitoascii(temp);
temp.clear();
Escribir(test,"compreso.daar");
int Escribir(string i,const char* archivo)
fstream outputFile;
outputFile.open(archivo, fstream::app);
outputFile<<i;
outputFile.close();
return 0;
string bitoascii(std::string data)
std::stringstream sstream(data);
std::string output;
while(sstream.good())
std::bitset<8> bits;
sstream >> bits;
char c = char(bits.to_ulong());
output += c;
return output;
如果我通过控制台打印包含 Ø 的字符串没有空格,则文件应该有“Ø”有“Ø”或“ØØ”是“ØØ”
【问题讨论】:
请提供Minimal, Complete, and Verifiable example 顺便说一句,您应该将textosize
声明为const int
,因为它在分配后不会更改。其他变量也是如此。
Ø
是 ASCII 字符吗? ASCII code 是什么?你怎么知道有空格?
因为在写入txt文件时,每个字母之间都有空格,但是如果我通过控制台打印它就没有空格
Ø 只是一个例子,这是一个霍夫曼压缩器
【参考方案1】:
在函数bitoascii()
中,在将数据从sstream
传输到bits
后,您并没有检查传输是否成功,而是没有转换数据,bits
的值为0x00,该值记录在文件,但字符 '\0'
不可打印。
只需添加
sstream.good()
即可知道bits
是否正确 在输出字符串中添加字符之前编写。
函数bitascii()
应该是:
string bitoascii(std::string data)
std::stringstream sstream(data);
std::string output;
while(sstream.good())
std::bitset<8> bits;
sstream >> bits;
// check is the transfer failed then exit from while
if (!sstream.good()) break;
char c = char(bits.to_ulong());
output += c;
return output;
【讨论】:
感谢您的帮助 嗯,也谢谢你,我之前没玩过bitset
。所以,帮助和玩耍是最好的。以上是关于使用fstream写a时的空格的主要内容,如果未能解决你的问题,请参考以下文章
C++标准I/O库:iostream, fstream, sstringstream