📄 高手啊,,帮我将这个c程序改写delphi吧。有难度的。有关pdu转码的问题 delphi - windows sdk-api - csdn社区 community_csdn_net.htm
字号:
// 指针后移 <BR>
gsmString2Bytes(pSrc, @tmp, 2);
// 用户信息长度(TP-UDL) <BR> inc(pSrc,
2); //
指针后移 <BR> if(pDst^.TP_DCS)=
GSM_7BIT then <BR>
begin <BR>
// 7-bit解码 <BR>
if (tmp and 7)>0 then
tmp := tmp*7/4+2 <BR>
else tmp:=tmp*7/4;
<BR> nDstLength
:= gsmString2Bytes(pSrc, buf, tmp); //
格式转换 <BR>
gsmDecode7bit(buf, pDst^.TP_UD, nDstLength);
// 转换到TP-DU <BR>
nDstLength := tmp; <BR>
end <BR>
else if(pDst^.TP_DCS = GSM_UCS2)then <BR>
begin <BR>
// UCS2解码 <BR>
nDstLength :=
gsmString2Bytes(pSrc, buf, tmp * 2);
// 格式转换 <BR>
nDstLength :=
gsmDecodeUcs2(buf, pDst^.TP_UD, nDstLength);
// 转换到TP-DU <BR>
end <BR> else <BR>
begin <BR>
// 8-bit解码 <BR>
nDstLength :=
gsmString2Bytes(pSrc, buf, tmp * 2);
// 格式转换 <BR>
nDstLength :=
gsmDecode8bit(buf, pDst^.TP_UD, nDstLength);
// 转换到TP-DU <BR>
end; <BR> <BR>
// 返回目标字符串长度 <BR>
result:= nDstLength; <BR> end; <BR> <A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_28726049>4 楼</A>flayyao(姚俊)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2005-04-02 15:32:21 得分 0 </SPAN></H3>
<P>手机程序也可以用delphi写吗<A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_28738623>5 楼</A>WangMinYI(步行者)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2005-04-03 15:40:04 得分 0 </SPAN></H3>
<P>gsmString2Bytes();的函数在delphi中没有的。。在C中是什么意思呢?<A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_28739835>6 楼</A>flyinwuhan(制怒·三思而后行)<INPUT class=star2 title="二星用户 该版得分小于等于30000分,大于10000分" type=button></STRONG><SPAN>回复于
2005-04-03 17:19:47 得分 0 </SPAN></H3>
<P>gsmString2Bytes/gsmDecodeUcs2/gsmDecode8bit这些函数都是自己写的,不是系统的,不是Windows/Delphi的~~~~~~~~~~~~~~~~<A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_28740551>7 楼</A>old_wei(老魏)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2005-04-03 18:20:43 得分 0 </SPAN></H3>
<P>汉字转PDU编码 <BR> <BR> function Encode1(var
s:String):String; <BR> var <BR>
i,j,len:Integer; <BR> cur:Integer; <BR>
t:String; <BR> ws:WideString;
<BR> begin <BR> Result:=''; <BR>
ws:=s; <BR> len:=Length(ws);
<BR> i:=1;j:=0; <BR> while
i<=len do <BR> begin <BR>
cur:=ord(ws[i]); <BR>
//BCD转换 <BR>
FmtStr(t,'%4.4X',[cur]); <BR>
Result:=Result+t; <BR>
inc(i); <BR>
//移位计数达到7位的特别处理 <BR> j:=(j+1)
mod 7; <BR> end; <BR> end;
<BR> <A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_28753148>8 楼</A>WangMinYI(步行者)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2005-04-04 12:32:05 得分 0 </SPAN></H3>
<P>怎么将PDU转为汉字呢??<A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_28753189>9 楼</A>WangMinYI(步行者)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2005-04-04 12:33:28 得分 0 </SPAN></H3>
<P>pdu编码格式 <BR> <BR> 08 //短消息中心长度
<BR> 91 //短消息中心有国家编码 没有为81 <BR> 68 31
08 02 00 05 f0 //短消息中心
<BR> 31 //需要状态报告//不需为11 <BR> 00 //永远为00
//分割符 <BR> 0D //目标号码的长度14位 <BR> 91
//有国家编码//没有为81 <BR> 68 31 36 32 64
49 F0 //目标号码 +8613632346940 <BR> 00
//TP-PID.协议标识,一般为00,其他值大家知道的帮忙补充一下 <BR> 08
//是否免提//是为18 <BR> A7 //有效期标志 <BR> 04
//正文4字节 <BR> 4F 60 59 7D //你好
短消息内容 <BR> <BR> 若没有短消息中心,编码为: <BR> 00
//表示默认短消息中心 <BR> 31 //需要状态报告//不需为11 <BR>
00 //永远为00 //分割符 <BR> 0D //目标号码的长度14位
<BR> 91 //有国家编码//没有为81 <BR> 68 31 36
32 64 49 F0 //目标号码 +8613632346940
<BR> 00 //TP-PID.协议标识,一般为00,其他值大家知道的帮忙补充一下
<BR> 08 //是否免提//是为18 <BR> A7 //有效期标志
<BR> 04 //正文4字节 <BR> 4F 60 59 7D
//你好 短消息内容 <BR> <BR> <A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_28753516>10 楼</A>WangMinYI(步行者)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2005-04-04 12:43:53 得分 0 </SPAN></H3>
<P>找到其它的那一部分了,供大家分享.. <BR> int gsmEncode7bit(const
char* pSrc, unsigned char* pDst, int
nSrcLength) <BR> { <BR>
int nSrc; //
源字符串的计数值 <BR> int nDst;
// 目标编码串的计数值
<BR> int nChar;
// 当前正在处理的组内字符字节的序号,范围是0-7
<BR> unsigned char nLeft;
// 上一字节残余的数据 <BR>
<BR> // 计数值初始化
<BR> nSrc = 0; <BR>
nDst = 0; <BR>
<BR> //
将源串每8个字节分为一组,压缩成7个字节 <BR> //
循环该处理过程,直至源串被处理完 <BR> //
如果分组不到8字节,也能正确处理 <BR>
while(nSrc<nSrcLength) <BR> {
<BR> //
取源字符串的计数值的最低3位 <BR>
nChar = nSrc & 7;
<BR> <BR>
// 处理源串的每个字节 <BR>
if(nChar == 0)
<BR> {
<BR>
// 组内第一个字节,只是保存起来,待处理下一个字节时使用 <BR>
nLeft = *pSrc; <BR>
} <BR>
else <BR>
{ <BR>
//
组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节 <BR>
*pDst =
(*pSrc << (8-nChar)) | nLeft;
<BR> <BR>
//
将该字节剩下的左边部分,作为残余数据保存起来 <BR>
nLeft = *pSrc
>> nChar; <BR>
// 修改目标串的指针和计数值
pDst++; <BR>
nDst++; <BR>
}
<BR>
<BR> //
修改源串的指针和计数值 <BR>
pSrc++; nSrc++; <BR> }
<BR> <BR>
// 返回目标串长度 <BR>
return nDst; <BR> } <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -