用函数1
转换成unicode编码
函数2
将unicode编码转回"你好";
14 个解决方案
#2
遍历字符串,将str[i]转成WORD值按十六进制方式输出.
#3
#4
有具体实例吗?/
#5
转换成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累加
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累加
#6
如何转回?
#7
up
#8
晕楼主还没搞定挺简单的.思路都给你了.
转回"你好的思路".
假设"你好"的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);//转回你好
转回"你好的思路".
假设"你好"的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);//转回你好
#9
UP
#10
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指的是控件,而非内部函数
你用以下程序看看吧:
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指的是控件,而非内部函数
#11
没太看清题意,如果是要转成字串编码,用以下程序
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); //得到你好
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); //得到你好
#12
晕中,发现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); //得到你好
}
以下这么简单的程序会出错,在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); //得到你好
}
#13
留念,以后可能用的到
#14
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); //得到你好
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); //得到你好
#1
#2
遍历字符串,将str[i]转成WORD值按十六进制方式输出.
#3
#4
有具体实例吗?/
#5
转换成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累加
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累加
#6
如何转回?
#7
up
#8
晕楼主还没搞定挺简单的.思路都给你了.
转回"你好的思路".
假设"你好"的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);//转回你好
转回"你好的思路".
假设"你好"的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);//转回你好
#9
UP
#10
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指的是控件,而非内部函数
你用以下程序看看吧:
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指的是控件,而非内部函数
#11
没太看清题意,如果是要转成字串编码,用以下程序
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); //得到你好
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); //得到你好
#12
晕中,发现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); //得到你好
}
以下这么简单的程序会出错,在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); //得到你好
}
#13
留念,以后可能用的到
#14
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); //得到你好
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); //得到你好