d盘根目录下有一test.txt文本,内容是d7dccffe(十六进制汉字“总晓”)
问题是怎么从文本中读取内容转化为汉字并输出到另一文本test2.txt中?用的是c++的部分程序是:#include<iostream>#include<fstream>...
问题是怎么从文本中读取内容转化为汉字并输出到另一文本test2.txt中?用的是c++
的部分程序是:
#include <iostream>
#include <fstream>
using namespace std;
const int SIZE=256;
void main()
{
ifstream file;
file.open("d:\\test.txt");
char str[SIZE]={1};//赋初始值
file.read(str,SIZE);//读取文本内容到str数组
file.close();
cin.get();
}
输出到test2.txt那段我会,关键是如何读取转化(是读取哦)? 展开
的部分程序是:
#include <iostream>
#include <fstream>
using namespace std;
const int SIZE=256;
void main()
{
ifstream file;
file.open("d:\\test.txt");
char str[SIZE]={1};//赋初始值
file.read(str,SIZE);//读取文本内容到str数组
file.close();
cin.get();
}
输出到test2.txt那段我会,关键是如何读取转化(是读取哦)? 展开
4个回答
展开全部
可以用string来读取中文
#include"fstream"
#include"string"
#include"iostream"
using namespace std;
int main()
{
string s;
ifstream fin;
ofstream fout;
fin.open("d:\\test1.txt");
fout.open("d:\\test2.txt");
while(!fin.eof())
{
getline(fin,s); //读取一行字符
fout<<s<<'\n';
cout<<s;
}
fin.close();
fout.close();
return 0;
}
不要自定义数组,很麻烦,最好用string,可靠又简便,写入时也用string来写
程序已测试过,中文可以成功输出到test2中去,也可以正常显示,只要使用string就可以了
追问
不懂了,我用你的方法不行。我用的是vs2012。
貌似陷入死循环了还是怎么的。本来test.txt只有几个字符,运行以后黑框什么也不显示,回车也关不掉,只好叉掉...。然后发现test.txt变成6M多了,全是空格。test.txt空,什么也没有
展开全部
读test.txt进来,每两个字母转成16进制的char,转换完得到char[],就是中文的“总晓”。
再将这个char[] 写入test2.txt,即是中文。
#include <iostream>
#include <fstream>
using namespace std;
const int SIZE=128;
int char2num(char ch);
void main(){
ifstream file;
file.open("test.txt");
char str[SIZE]={0}; //赋初始值
file.read(str, SIZE); //读取文本内容到str数组
file.close();
int len=strlen(str);
char str2[SIZE];
int j=0, i, n;
for (i=0; i<len; i+=2){
n=char2num(str[i])*16+char2num(str[i+1]);
str2[j++]=n;
}
str2[j]=0;
cout<<"原文字:"<<str<<endl;
cout<<"转换后:"<<str2<<endl;
ofstream outFile;
outFile.open("test2.txt");
outFile.write(str2, j);
outFile.close();
cin.get();
}
int char2num(char ch){ /*将字符转成数字*/
if (ch>='a'){
return ch-'a'+10;
}else if (ch>='A'){
return ch-'A'+10;
}else{
return ch-'0';
}
}
再将这个char[] 写入test2.txt,即是中文。
#include <iostream>
#include <fstream>
using namespace std;
const int SIZE=128;
int char2num(char ch);
void main(){
ifstream file;
file.open("test.txt");
char str[SIZE]={0}; //赋初始值
file.read(str, SIZE); //读取文本内容到str数组
file.close();
int len=strlen(str);
char str2[SIZE];
int j=0, i, n;
for (i=0; i<len; i+=2){
n=char2num(str[i])*16+char2num(str[i+1]);
str2[j++]=n;
}
str2[j]=0;
cout<<"原文字:"<<str<<endl;
cout<<"转换后:"<<str2<<endl;
ofstream outFile;
outFile.open("test2.txt");
outFile.write(str2, j);
outFile.close();
cin.get();
}
int char2num(char ch){ /*将字符转成数字*/
if (ch>='a'){
return ch-'a'+10;
}else if (ch>='A'){
return ch-'A'+10;
}else{
return ch-'0';
}
}
追问
你的方法也对,但一楼的更简洁一些,谢谢啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
搞了半天,真难脱离直接调用C函数.
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
ifstream file("test.txt");
char *p=new char[2];
unsigned char c;
while(file.read(p,2)){
c=(unsigned char)strtoul(p,0,16);
cout<<c;
}
delete [] p;
}
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
ifstream file("test.txt");
char *p=new char[2];
unsigned char c;
while(file.read(p,2)){
c=(unsigned char)strtoul(p,0,16);
cout<<c;
}
delete [] p;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("%s","\xd7\xdc\xcf\xfe");转化成这个样子输出即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询