请问高手,在bcb里做手机通讯怎样把中文转成pdu格式阿??

tingo3561 2002-09-16 05:40:49
我把中文转化成unicode的格式,可就是发不出去,以下为我的代码:
AnsiString __fastcall TForm1::Chi2Pdu(AnsiString asMsg)
{int iLen=asMsg.Length();
char *chMsg = new char[iLen];
AnsiString sReturn;
char *ss;

strcpy(chMsg,asMsg.c_str());
for(int i=0;i<iLen;i++)
{ int ii=sizeof(chMsg[i]);
// ss = ss.Format("%4.4x",OPENARRAY(TVarRec,(chMsg[i])));

sprintf(ss,"%4.4x",chMsg[i]);
sReturn+=ss;
}
return sReturn;

...全文
46 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
NowCan 2002-09-17
  • 打赏
  • 举报
回复
那段代码是公开的,网上多得是。
http://vip.6to23.com/NowCan1/misc/sms.zip
这里有很多。
BCppBuilder 2002-09-16
  • 打赏
  • 举报
回复
你可以用你的Chi2Pdu(AnsiString asMsg)和
suerain(Liulang) 的AnsiString EncodeChinese(AnsiString InputStr)
比较一下,看编码是否有误,他的是对的.
如果编码没问题,那就是发送有问题,用
AnsiString SendStr ,然后向串口写SnedStr.s_str,好像不行,
你可以把最后的结束码用以下方式单发:
char SendOne[1];
SendOne[0]='\x1a';
Hawk_sun 2002-09-16
  • 打赏
  • 举报
回复
楼上的大虾,你哪个公司的,怎么会跟我们用的代码那么像!
suerain 2002-09-16
  • 打赏
  • 举报
回复
别人的成果,哈哈

AnsiString DecodeChinese(AnsiString InputStr) //中文解码
{
wchar_t Buf[300];
for(int i=0;i<InputStr.Length();i=i+4)
{
Buf[i/4]=StrToInt("0x"+InputStr.SubString(i+1,4));
}
Buf[InputStr.Length()/4]=0;
return WideCharToString(Buf);
}
//-------------------------------------------
AnsiString EncodeChinese(AnsiString InputStr) //中文编码
{
int cur;
AnsiString tempstr,returnstr;
WideString ws;
wchar_t mid[2];
ws=WideString(InputStr);
for(int i=1;i<=ws.Length();i++)
{
wcscpy(mid,ws.SubString(i,1).c_bstr());
cur=mid[0];
FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur)));
returnstr=returnstr+tempstr;
}
// s.SetLength(returnstr.Length());
// s=returnstr;
return returnstr;
}
//-----------------------------------------------------
AnsiString EncodeEnglish(AnsiString InputStr) //英文编码
{
int n,len,cur;
String tempstr,returnstr;
unsigned char mid1[2],mid2[2];
len=InputStr.Length();
n=0;
for(int i=1;i<=len;i++)
{
if (i<len)
{
strcpy(mid1,InputStr.SubString(i,1).c_str());
strcpy(mid2,InputStr.SubString(i+1,1).c_str());
cur=(mid1[0]>>n)|((mid2[0]<<(7-n))& 0xff);
}
else
{
strcpy(mid1,InputStr.SubString(i,1).c_str());
cur=(mid1[0]>>n)& 0x7f;
}
FmtStr(tempstr,"%2.2X",ARRAYOFCONST((cur)));
returnstr=returnstr+tempstr;
n=(n+1)%7;
if (n==0) i++;
}
return returnstr;
}
//-----------------------------------------------------
int ReturnHex(int Value)
{
switch (Value)
{
case 0:
Value=0x7f;
break;
case 1:
Value=0x3f;
break;
case 2:
Value=0x1f;
break;
case 3:
Value=0x0f;
break;
case 4:
Value=0x07;
break;
case 5:
Value=0x03;
break;
case 6:
Value=0x01;
break;
case 7:
Value=0x00;
break;
}
return Value;
}
AnsiString DecodeEnglish(AnsiString InputStr) //英文解码
{
unsigned char InStr[300];
char OutStr[300];
String str;
int j=0,i=0;
int Point=0;
int temp;
memset(InStr,0,301);
memset(OutStr,0,301);
for(int i=0;i<InputStr.Length();i=i+2)
{
str="0x"+InputStr.SubString(i+1,2);
InStr[i/2]=StrToInt(str);
}
while(j<=InputStr.Length()/2)
{
if(Point==0)
OutStr[i]=InStr[j]&ReturnHex(Point);
else
OutStr[i]=((InStr[j]&ReturnHex(Point))<<Point)|(InStr[j-1]>>(8-Point));
if(Point%7==0&&Point!=0)
Point=0;
else
Point=Point+1;
i++;
j=i-(i/8);
}
OutStr[12]=((InStr[12]&0x07)<<5)|(InStr[11]>>(8-5));
return AnsiString(OutStr);
}
//-------------------------------------------------------

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧