使用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;
}
文件应该有“Ø”有“Ø”或“ØØ”是“ØØ”如果我通过控制台打印包含Ø的字符串它没有空格
答案 0 :(得分:0)
在函数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;
}