📄 高手啊,,帮我将这个c程序改写delphi吧。有难度的。有关pdu转码的问题 delphi - windows sdk-api - csdn社区 community_csdn_net.htm
字号:
gsmString2Bytes(pSrc,
&tmp, 2); // 取长度
<BR> if(tmp
& 1) tmp += 1; //
调整奇偶性 <BR>
pSrc += 4;
// 指针后移 <BR>
gsmSerializeNumbers(pSrc,
pDst->TPA, tmp); // 取TP-RA号码
<BR> pSrc
+= tmp; //
指针后移 <BR> } <BR>
<BR> //
TPDU段协议标识、编码方式、用户信息等 <BR>
gsmString2Bytes(pSrc, (unsigned char*)&pDst->TP_PID,
2); // 取协议标识(TP-PID) <BR>
pSrc += 2;
// 指针后移 <BR>
gsmString2Bytes(pSrc, (unsigned char*)&pDst->TP_DCS,
2); // 取编码方式(TP-DCS) <BR>
pSrc += 2;
// 指针后移 <BR>
gsmSerializeNumbers(pSrc, pDst->TP_SCTS, 14);
//
服务时间戳字符串(TP_SCTS) <BR> pSrc
+= 14; //
指针后移 <BR> gsmString2Bytes(pSrc,
&tmp, 2); // 用户信息长度(TP-UDL)
<BR> pSrc += 2;
// 指针后移 <BR>
if(pDst->TP_DCS == GSM_7BIT)
<BR> {
<BR> //
7-bit解码 <BR>
nDstLength = gsmString2Bytes(pSrc, buf, tmp
& 7 ? (int)tmp * 7 /
4 + 2 : (int)tmp * 7 /
4); // 格式转换 <BR>
gsmDecode7bit(buf, pDst->TP_UD,
nDstLength); // 转换到TP-DU <BR>
nDstLength =
tmp; <BR> } <BR>
else if(pDst->TP_DCS ==
GSM_UCS2) <BR> { <BR>
// UCS2解码
<BR> nDstLength
= gsmString2Bytes(pSrc, buf, tmp * 2);
// 格式转换
<BR> nDstLength
= gsmDecodeUcs2(buf, pDst->TP_UD, nDstLength);
// 转换到TP-DU <BR>
} <BR> else
<BR> { <BR>
// 8-bit解码 <BR>
nDstLength =
gsmString2Bytes(pSrc, buf, tmp * 2);
// 格式转换 <BR>
nDstLength =
gsmDecode8bit(buf, pDst->TP_UD, nDstLength);
// 转换到TP-DU <BR>
} <BR> <BR>
// 返回目标字符串长度 <BR>
return nDstLength; <BR> } <BR>
<SPAN>问题点数:100、回复次数:11</SPAN><A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A> </P>
<DIV class=tagad><IFRAME
src="高手啊,,帮我将这个C程序改写DELPHI吧。有难度的。有关PDU转码的问题 Delphi - Windows SDK-API - CSDN社区 community_csdn_net.files/Board.htm"
frameBorder=0 scrolling=no></IFRAME></DIV>
<H3><STRONG><A class=anchor name=r_28688539>1 楼</A>WangMinYI(步行者)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2005-03-31 19:39:57 得分 0 </SPAN></H3>
<P>请大家多多帮忙。。<A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_28688551>2 楼</A>WangMinYI(步行者)<INPUT class=user2 title="二级用户 该版得分小于等于500分,大于100分" type=button></STRONG><SPAN>回复于
2005-03-31 19:40:25 得分 0 </SPAN></H3>
<P>其实这个是非常有意义的。在GSM中用<A
href="http://topic.csdn.net/t/20050331/19/3898783.html#">Top</A></P>
<H3><STRONG><A class=anchor name=r_28688934>3 楼</A>flyinwuhan(制怒·三思而后行)<INPUT class=star2 title="二星用户 该版得分小于等于30000分,大于10000分" type=button></STRONG><SPAN>回复于
2005-03-31 20:00:02 得分 <EM>100</EM></SPAN></H3>
<P>// 短消息参数结构,编码/解码共用 <BR> // 其中,字符串以0结尾
<BR> type <BR> SM_PARAM =
record <BR> SCA:array[0..16-1]
of char; // 短消息服务中心号码(SMSC地址) <BR>
TPA:array[0..16-1] of char//
目标号码或回复号码(TP-DA或TP-RA) <BR> TP_PID;
char; //
用户信息协议标识(TP-PID) <BR> TP_DCS;
char; //
用户信息编码方式(TP-DCS) <BR>
TP_SCTS:array[0..16-1] of char; //
服务时间戳字符串(TP_SCTS), 接收时用到 <BR>
TP_UD:array[0..161-1] of char; //
原始用户信息(编码前或解码后的TP-UD) <BR>
index:char; //
短消息序号,在读取时用到 <BR> end; <BR> PSM_PARAM =
^SM_PARAM; <BR> ---最好能改写成返回内容和电话号码的。 <BR>
//+CMGR: 1,,20 <BR>
//0891683110801505F0000BA13133452812F00000503092518342200131 <BR>
// PDU解码,用于接收、阅读短消息 <BR> // pSrc: 源PDU串指针
<BR> // pDst: 目标PDU参数指针 <BR> //
返回: 用户信息串长度 <BR> function gsmDecodePdu(const
pSrc:pchar; pDst:PSM_PARAM):integer; <BR> var
<BR> nDstLength:integer;
// 目标PDU串长度 <BR>
tmp : byte;
// 内部用的临时字节变量 <BR> buf :
array[0..256-1]of char; // 内部用的缓冲区 <BR>
begin <BR>
// SMSC地址信息段 <BR>
gsmString2Bytes( pSrc, @tmp, 2);
// 取长度 <BR> tmp :=
(tmp - 1) * 2; //
SMSC号码串长度 <BR> inc(pSrc,
4);
// 指针后移 <BR>
gsmSerializeNumbers(pSrc, pDst^.SCA, tmp);
// 转换SMSC号码到目标PDU串 <BR>
inc(pSrc, tmp);
// 指针后移 <BR>
<BR> // TPDU段基本参数、回复地址等
<BR> gsmString2Bytes(pSrc, @tmp,
2); // 取基本参数 <BR>
inc(pSrc,2);
// 指针后移 <BR> if(tmp
and $80) > 0 then <BR>
begin <BR>
// 包含回复地址,取回复地址信息 <BR>
gsmString2Bytes(pSrc, @tmp,
2); // 取长度 <BR>
if(tmp and
1)>0 then tmp := tmp+1;
// 调整奇偶性 <BR>
inc(pSrc,4);
// 指针后移 <BR>
gsmSerializeNumbers(pSrc,
pDst^.TPA, tmp); // 取TP-RA号码
<BR> inc(pSrc,
tmp); //
指针后移 <BR> end; <BR>
<BR> //
TPDU段协议标识、编码方式、用户信息等 <BR>
gsmString2Bytes(pSrc, PChar(@pDst^.TP_PID), 2);
// 取协议标识(TP-PID) <BR>
inc(pSrc, 2);
// 指针后移 <BR>
gsmString2Bytes(pSrc, Pchar(@pDst^.TP_DCS), 2);
// 取编码方式(TP-DCS) <BR>
inc(pSrc,2); //
指针后移 <BR>
gsmSerializeNumbers(pSrc, pDst^.TP_SCTS, 14);
// 服务时间戳字符串(TP_SCTS)
<BR> inc(pSrc,14);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -