C++中 中文字符串的存储问题
chars[100]="谁知道"fstreamfile;//建立文件流file.open(mapsavename,ios::binary|ios::out);//打开文件...
char s[100]="谁知道"
fstream file;//建立文件流
file.open(mapsavename,ios::binary|ios::out);//打开文件
if(file==0){
MessageBox(hwnd,"地图文件创建失败!","错误",MB_OK|MB_ICONERROR);
}
file.write(s,sizeof(s));
file.close();
按以上步骤操作,用记事本打开文件中显示“谁知道”,并不是二进制的乱码。
file.write((char*)&i,sizeof(i));
用这种方法写入一个数字的确是二进制的
怎么以二进制写入一串中文字符串? 展开
fstream file;//建立文件流
file.open(mapsavename,ios::binary|ios::out);//打开文件
if(file==0){
MessageBox(hwnd,"地图文件创建失败!","错误",MB_OK|MB_ICONERROR);
}
file.write(s,sizeof(s));
file.close();
按以上步骤操作,用记事本打开文件中显示“谁知道”,并不是二进制的乱码。
file.write((char*)&i,sizeof(i));
用这种方法写入一个数字的确是二进制的
怎么以二进制写入一串中文字符串? 展开
3个回答
展开全部
不管你用几进制写,字符串就是字符串,字符串的码是不会改变的,除非你改变编码。
或者你在文件头上先写一个字节的任意数字,再写入你的字符串,那么记事本打开可能就是乱码了。但是有其它工具打开,还是很明显能看到内容的。
实在有必要就请加密或压缩或改变编码。
或者你在文件头上先写一个字节的任意数字,再写入你的字符串,那么记事本打开可能就是乱码了。但是有其它工具打开,还是很明显能看到内容的。
实在有必要就请加密或压缩或改变编码。
更多追问追答
追问
在文件开头写入数字后再写字符串还是能清楚地看到,我也想加密,但是卡在了无法加密汉字(多字节),想用wchar_t但是初始 wchar_t ws[100]=L"汉字";这么写编译器就说[Error] converting to execution character set: Illegal byte sequence如果把“汉字”改成“English”就可以。搞不懂,还有改变编码怎么改/
追答
不需要WCHAR_T
最简单用char对每一个字节异或一个固定值就可以了。逆算法就再次异或这个值就可以了。
记住这个固定值保密。不过和容易破解,十分容易,只防君子,不防小人。
不知道你用来加密汉字的目的是什么,如果商用,建议使用AES等加密算法。
如果不需要逆向解码的(例如:密码保存等),就用MD5,SHA256等算法。
如果网络传输:建议先用ECC算法,再用AES等加密算法。 觉得麻烦就直接使用OpenSSL等知名Library。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询