⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 高手啊,,帮我将这个c程序改写delphi吧。有难度的。有关pdu转码的问题 delphi - windows sdk-api - csdn社区 community_csdn_net.htm

📁 PDU协议解释,分析信息传输的具体指令,扩大实际数据量
💻 HTM
📖 第 1 页 / 共 5 页
字号:
&nbsp; &nbsp; &nbsp; // &nbsp; 指针后移 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; gsmString2Bytes(pSrc, &nbsp; @tmp, &nbsp; 2); &nbsp; &nbsp; &nbsp; &nbsp; 
// &nbsp; 用户信息长度(TP-UDL) &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inc(pSrc, 
&nbsp; 2); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 
指针后移 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(pDst^.TP_DCS)= &nbsp; 
GSM_7BIT &nbsp; then &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; begin &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; // &nbsp; 7-bit解码 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; if &nbsp; (tmp &nbsp; and &nbsp; 7)&gt;0 &nbsp; then 
&nbsp; tmp &nbsp; := &nbsp; tmp*7/4+2 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else &nbsp; tmp:=tmp*7/4; &nbsp; &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nDstLength 
&nbsp; := &nbsp; gsmString2Bytes(pSrc, &nbsp; buf, &nbsp; tmp); &nbsp; &nbsp; // 
&nbsp; 格式转换 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; gsmDecode7bit(buf, &nbsp; pDst^.TP_UD, &nbsp; nDstLength); &nbsp; &nbsp; 
&nbsp; &nbsp; // &nbsp; 转换到TP-DU &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; nDstLength &nbsp; := &nbsp; tmp; &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; end &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
else &nbsp; if(pDst^.TP_DCS &nbsp; = &nbsp; GSM_UCS2)then &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; begin &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; UCS2解码 &nbsp; <BR>&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nDstLength &nbsp; := &nbsp; 
gsmString2Bytes(pSrc, &nbsp; buf, &nbsp; tmp &nbsp; * &nbsp; 2); &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 格式转换 &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nDstLength &nbsp; := 
&nbsp; gsmDecodeUcs2(buf, &nbsp; pDst^.TP_UD, &nbsp; nDstLength); &nbsp; &nbsp; 
&nbsp; &nbsp; // &nbsp; 转换到TP-DU &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
end &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else &nbsp; <BR>&nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; begin &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; // &nbsp; 8-bit解码 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nDstLength &nbsp; := &nbsp; 
gsmString2Bytes(pSrc, &nbsp; buf, &nbsp; tmp &nbsp; * &nbsp; 2); &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 格式转换 &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nDstLength &nbsp; := 
&nbsp; gsmDecode8bit(buf, &nbsp; pDst^.TP_UD, &nbsp; nDstLength); &nbsp; &nbsp; 
&nbsp; &nbsp; // &nbsp; 转换到TP-DU &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
end; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; // &nbsp; 返回目标字符串长度 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; result:= &nbsp; nDstLength; &nbsp; <BR>&nbsp; end; &nbsp; <BR>&nbsp; <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编码 &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; function &nbsp; Encode1(var 
&nbsp; s:String):String; &nbsp; <BR>&nbsp; var &nbsp; <BR>&nbsp; &nbsp; &nbsp; 
i,j,len:Integer; &nbsp; <BR>&nbsp; &nbsp; &nbsp; cur:Integer; &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; t:String; &nbsp; <BR>&nbsp; &nbsp; &nbsp; ws:WideString; &nbsp; 
<BR>&nbsp; begin &nbsp; <BR>&nbsp; &nbsp; &nbsp; Result:=''; &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; ws:=s; &nbsp; <BR>&nbsp; &nbsp; &nbsp; len:=Length(ws); &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; i:=1;j:=0; &nbsp; <BR>&nbsp; &nbsp; &nbsp; while &nbsp; 
i&lt;=len &nbsp; do &nbsp; <BR>&nbsp; &nbsp; &nbsp; begin &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur:=ord(ws[i]); &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //BCD转换 &nbsp; <BR>&nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FmtStr(t,'%4.4X',[cur]); &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; Result:=Result+t; &nbsp; <BR>&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; inc(i); &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
//移位计数达到7位的特别处理 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j:=(j+1) &nbsp; 
mod &nbsp; 7; &nbsp; <BR>&nbsp; &nbsp; &nbsp; end; &nbsp; <BR>&nbsp; end; &nbsp; 
<BR>&nbsp; <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编码格式 &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; 08 &nbsp; //短消息中心长度 &nbsp; 
<BR>&nbsp; 91 &nbsp; //短消息中心有国家编码 &nbsp; 没有为81 &nbsp; <BR>&nbsp; 68 &nbsp; 31 
&nbsp; 08 &nbsp; 02 &nbsp; 00 &nbsp; 05 &nbsp; f0 &nbsp; //短消息中心 &nbsp; 
<BR>&nbsp; 31 &nbsp; //需要状态报告//不需为11 &nbsp; <BR>&nbsp; 00 &nbsp; //永远为00 &nbsp; 
//分割符 &nbsp; <BR>&nbsp; 0D &nbsp; //目标号码的长度14位 &nbsp; <BR>&nbsp; 91 &nbsp; 
//有国家编码//没有为81 &nbsp; <BR>&nbsp; 68 &nbsp; 31 &nbsp; 36 &nbsp; 32 &nbsp; 64 
&nbsp; 49 &nbsp; F0 &nbsp; //目标号码 &nbsp; +8613632346940 &nbsp; <BR>&nbsp; 00 
&nbsp; //TP-PID.协议标识,一般为00,其他值大家知道的帮忙补充一下 &nbsp; <BR>&nbsp; 08 &nbsp; 
//是否免提//是为18 &nbsp; <BR>&nbsp; A7 &nbsp; //有效期标志 &nbsp; <BR>&nbsp; 04 &nbsp; 
//正文4字节 &nbsp; <BR>&nbsp; 4F &nbsp; 60 &nbsp; 59 &nbsp; 7D &nbsp; //你好 &nbsp; 
短消息内容 &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; 若没有短消息中心,编码为: &nbsp; <BR>&nbsp; 00 
&nbsp; //表示默认短消息中心 &nbsp; <BR>&nbsp; 31 &nbsp; //需要状态报告//不需为11 &nbsp; <BR>&nbsp; 
00 &nbsp; //永远为00 &nbsp; //分割符 &nbsp; <BR>&nbsp; 0D &nbsp; //目标号码的长度14位 &nbsp; 
<BR>&nbsp; 91 &nbsp; //有国家编码//没有为81 &nbsp; <BR>&nbsp; 68 &nbsp; 31 &nbsp; 36 
&nbsp; 32 &nbsp; 64 &nbsp; 49 &nbsp; F0 &nbsp; //目标号码 &nbsp; +8613632346940 
&nbsp; <BR>&nbsp; 00 &nbsp; &nbsp; //TP-PID.协议标识,一般为00,其他值大家知道的帮忙补充一下 &nbsp; 
<BR>&nbsp; 08 &nbsp; //是否免提//是为18 &nbsp; <BR>&nbsp; A7 &nbsp; //有效期标志 &nbsp; 
<BR>&nbsp; 04 &nbsp; //正文4字节 &nbsp; <BR>&nbsp; 4F &nbsp; 60 &nbsp; 59 &nbsp; 7D 
&nbsp; //你好 &nbsp; 短消息内容 &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; <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>找到其它的那一部分了,供大家分享.. &nbsp; <BR>&nbsp; int &nbsp; gsmEncode7bit(const &nbsp; 
char* &nbsp; pSrc, &nbsp; unsigned &nbsp; char* &nbsp; pDst, &nbsp; int &nbsp; 
nSrcLength) &nbsp; <BR>&nbsp; { &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
int &nbsp; nSrc; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 
&nbsp; 源字符串的计数值 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int &nbsp; nDst; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 目标编码串的计数值 
&nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int &nbsp; nChar; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 当前正在处理的组内字符字节的序号,范围是0-7 &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unsigned &nbsp; char &nbsp; nLeft; &nbsp; 
&nbsp; &nbsp; &nbsp; // &nbsp; 上一字节残余的数据 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 计数值初始化 &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nSrc &nbsp; = &nbsp; 0; &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; nDst &nbsp; = &nbsp; 0; &nbsp; <BR>&nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 
将源串每8个字节分为一组,压缩成7个字节 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 
循环该处理过程,直至源串被处理完 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 
如果分组不到8字节,也能正确处理 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
while(nSrc&lt;nSrcLength) &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 
取源字符串的计数值的最低3位 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; nChar &nbsp; = &nbsp; nSrc &nbsp; &amp; &nbsp; 7; &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 处理源串的每个字节 &nbsp; <BR>&nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(nChar &nbsp; == &nbsp; 0) 
&nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { 
&nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; // &nbsp; 组内第一个字节,只是保存起来,待处理下一个字节时使用 &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; nLeft &nbsp; = &nbsp; *pSrc; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 
组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *pDst &nbsp; = &nbsp; 
(*pSrc &nbsp; &lt;&lt; &nbsp; (8-nChar)) &nbsp; | &nbsp; nLeft; &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 
将该字节剩下的左边部分,作为残余数据保存起来 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nLeft &nbsp; = &nbsp; *pSrc 
&nbsp; &gt;&gt; &nbsp; nChar; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 修改目标串的指针和计数值 
&nbsp; pDst++; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nDst++; &nbsp; &nbsp; <BR>&nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // &nbsp; 
修改源串的指针和计数值 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; pSrc++; &nbsp; nSrc++; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } 
&nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; // &nbsp; 返回目标串长度 &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
return &nbsp; nDst; &nbsp; &nbsp; <BR>&nbsp; } &nbsp; <BR>&nbsp; &nbsp; &nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -