社区
C++ Builder
帖子详情
字符编码转换问题???
52vc
2010-01-15 03:41:35
UnicodeString str="你好";
用函数1
转换成unicode编码
函数2
将unicode编码转回"你好";
...全文
284
14
打赏
收藏
字符编码转换问题???
UnicodeString str="你好"; 用函数1 转换成unicode编码 函数2 将unicode编码转回"你好";
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
52vc
2010-01-26
打赏
举报
回复
WideString s=Edit1->Text;
WideString s1;
AnsiString s2;
char buff[2000];//编码长度2000
wchar_t buff1[500];//字符长度500
BinToHex((char *)s.c_bstr(),buff,s.Length()*2);
buff[s.Length()*4]='\0';
Memo1->Lines->Add(buff); //得到编码:604F7D59
HexToBin(buff,(char *) buff1,s.Length()*2);
buff1[s.Length()]=0;
s2=buff1; //先赋给AnsiString
s1=s2; //转成unicode
Memo1->Lines->Add(s1); //得到你好
geneshell
2010-01-25
打赏
举报
回复
留念,以后可能用的到
柯本
2010-01-24
打赏
举报
回复
晕中,发现BCB6的一个问题(是我晕了吗?...)
以下这么简单的程序会出错,在IDE下,运行
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString s;
wchar_t *p=L"你好";
s=p;
Edit1->Text=s;
} //经查,是在调用WideString的析构函数出错
会弹出CPU窗口,且Edit上无显示
多转一层就没问题了:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString s;
String s1;
wchar_t *p=L"你好";
s1=p;
s=s1;
Edit1->Text=s;
} //这里,s中为unicode内码:604F7D59
运行环境为BCB6+XP(SP3)及BCB6+windwos virtual(win7的virtual XP mode)
在win7+bcb2010下就没问题
所以上面的程序
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString s=L"你好";
WideString s1;
AnsiString s2;
char buff[9];
wchar_t buff1[3];
BinToHex((char *)s.c_bstr(),buff,4);
buff[8]='\0';
Memo1->Lines->Add(buff); //得到编码:604F7D59
HexToBin(buff,(char *) buff1,4);
buff1[2]=0;
s2=buff1; //先赋给AnsiString
s1=s2; //转成unicode
Memo1->Lines->Add(s1); //得到你好
}
TripH0101
2010-01-23
打赏
举报
回复
UP
柯本
2010-01-23
打赏
举报
回复
没太看清题意,如果是要转成字串编码,用以下程序
WideString s=L"你好";
WideString s1;
char buff[9];
wchar_t buff1[3];
BinToHex((char *)s.c_bstr(),buff,4);
buff[8]='\0';
Memo1->Lines->Add(buff); //得到编码:604F7D59
HexToBin(buff,(char *) buff1,4);
buff1[2]=0;
s1=buff1; //我的BCB6会在这报错,C2010没问题
Memo1->Lines->Add(s1); //得到你好
柯本
2010-01-23
打赏
举报
回复
BCB本身就有,且可以自动转换
你用以下程序看看吧:
unsigned char *p;
String e;
WideString s=L"你好"; //s中为unicode编码
p=(unsigned char *)s.c_bstr();
e.printf("%02x %02x %02x %02x",p[0],p[1],p[2],p[3]);
Memo1->Lines->Add(e);
AnsiString s1;
s1=s; //这里,自动转为AnsiString,s1中为GBK码
p=(unsigned char *)s1.c_str();
e.printf("%02x %02x %02x %02x",p[0],p[1],p[2],p[3]);
Memo1->Lines->Add(e);
-----------------
结果为:
60 4f 7d 59 //你好 的unicode编码
e4 e3 ba c3 //你好 的GBK编码
以上代码在BCB6中测试
所谓BCB6不支持unicode指的是控件,而非内部函数
hemiya
2010-01-22
打赏
举报
回复
晕楼主还没搞定挺简单的.思路都给你了.
转回"你好的思路".
假设"你好"的16进制的字符串为(数值不对,举个例子)
str = "AABBCCDD"
1,先把"AA"这个16进制字符串转换为char,这样有4个char.
2,把这个4个char依次赋值到一个6byte的数组里,例如char *wbuf= new char[str.Length() + 2];
3,把wbuf最后两个赋值为NULL.
4,UnicodeString cnok((wchar_t *)wbuf);//转回你好
52vc
2010-01-22
打赏
举报
回复
up
52vc
2010-01-19
打赏
举报
回复
如何转回?
hemiya
2010-01-16
打赏
举报
回复
转换成unicode编码
UnicodeString str=L"你好";
UnicodeString str2, str3;
for (int i=1; i<=str.Length(); i++)
{
str3 = IntToHex((unsigned int)str[i], 2)
str2 += str3.SubString(str3.Length()-4, 4);
}
unicode编码转回"你好",麻烦点,还要注意字节的高低端.
每4组str2[i]到str2[i+4]转换成一个wchar_t,再用个UnicodeString str5累加
52vc
2010-01-16
打赏
举报
回复
有具体实例吗?/
ccrun.com
2010-01-15
打赏
举报
回复
遍历字符串,将str[i]转成WORD值按十六进制方式输出.
周药师
2010-01-15
打赏
举报
回复
http://topic.csdn.net/t/20050704/17/4122270.html
三菱PLC例程源码SFC编写伺服刀程序
三菱PLC例程源码SFC编写伺服刀程序本资源系百度网盘分享地址
tensorflow_serving_api-1.13.0-py2.py3-none-any.whl
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
三菱PLC例程源码层绕机
三菱PLC例程源码层绕机本资源系百度网盘分享地址
高级网络人才培训专家-X00070004 第31章 配置帧中继
高级网络人才培训专家_X00070004 第31章 配置帧中继
毕业论文知识图谱构建平台的python后端。模型相关在这个模块完成,深度学习基于pytorch.zip
人工智能毕业设计&课程设计
C++ Builder
13,822
社区成员
102,680
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章