pdu格式c代码(pdu报文格式)
admin 发布:2022-12-19 19:09 144
今天给各位分享pdu格式c代码的知识,其中也会对pdu报文格式进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、android直接发送pdu编码后的短信
- 2、英博尔can通讯的表现形式
- 3、长短信 PDU编码
- 4、VB发送短信使用PDU方式,高手进!
- 5、如何把短信中心号码转成PDU格式呢?
- 6、text模式和pdu模式的区别
android直接发送pdu编码后的短信
实现过程:
1初始化:ATZ\r
2设置文本模式:AT+CMGF=0\r(0:pdu模式,1:text模式)
3设置PDU头:
typedef struct {
char SCA[16]; // 短消息服务中心号码(SMSC地址)
char TPA[16]; // 目标号码或回复号码(TP-DA或TP-RA)
char TP_PID; // 用户信息协议标识(TP-PID)
char TP_DCS; // 用户信息编码方式(TP-DCS)
char TP_SCTS[16]; // 服务时间戳字符串(TP_SCTS), 接收时用到
char TP_UD[16]; // 原始用户信息
char index; //短消息序号,在读取时用到
}SM_PARAM;
// SMSC地址信息段
memset(buf, 0, sizeof(buf));
nLength = strlen(pSrc-SCA); // SMSC地址字符串的长度
buf[0] = (char)((nLength 1) == 0 ? nLength : nLength + 1) / 2 + 1; // SMSC地址信息长度
buf[1] = 0x91; // 固定: 用国际格式号码
nDstLength = gsmBytes2String(buf, pDst, 2); // 转换2个字节到目标PDU串
nDstLength += gsmInvertNumbers(pSrc-SCA, pDst[nDstLength], nLength); // 转换SMSC到目标PDU串
// TPDU段基本参数、目标地址等
memset(buf, 0, sizeof(buf));
nLength = strlen(pSrc-TPA); // TP-DA地址字符串的长度
buf[0] = 0x11; // 是发送短信(TP-MTI=01),TP-VP用相对格式(TP-VPF=10)
buf[1] = 0; // TP-MR=0
buf[2] = (char)nLength; // 目标地址数字个数(TP-DA地址字符串真实长度)
buf[3] = 0x91; // 固定: 用国际格式号码
nDstLength += gsmBytes2String(buf, pDst[nDstLength], 4); // 转换4个字节到目标PDU串
nDstLength += gsmInvertNumbers(pSrc-TPA, pDst[nDstLength], nLength); // 转换TP-DA到目标PDU串
// TPDU段协议标识、编码方式、用户信息等
//nLength = strlen(pSrc-TP_UD); // 用户信息字符串的长度
memset(buf, 0, sizeof(buf));
buf[0] = pSrc-TP_PID; // 协议标识(TP-PID)
buf[1] = pSrc-TP_DCS; // 用户信息编码方式(TP-DCS)
buf[2] = 1; // 有效期(TP-VP)为5分钟
buf[3] = str2hex(user_pdu, pSrc-TP_UD); //用户信息的长度
nDstLength += gsmBytes2String(buf, pDst[nDstLength], 4); // 转换该段数据到目标PDU串
strcat(pdu, "\x01a"); //以CTRL-A结束
gsmString2Bytes(pdu, nSmscLength, 2); // 取PDU串中的SMSC信息长度
4发送信息长度:AT+CMGS=长度,这步重要长度不对是发不出去的。
5发送用户信息
1、目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。
1使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;
2使用PDU模式不仅支持中文短信,也能发送英文短信。
2、PDU模式收发短信可以使用3种编码:
17-bit(用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可 “压缩”成7个)
28-bit(通常用于发送数据消息,如:图片了,铃声等等)
3UCS2编码(用于发送Unicode字符)
英博尔can通讯的表现形式
英博尔(控制器-仪表)CAN通讯协议的表现形式,协议规定汽车CAN网络中电机控制器向仪表发送的信息。
英博尔CAN引用标准:SAE J1939-21。
物理接口:采用CAN2.0B标准,通讯波特率为250kbps,数据中未使用或者保留的字节约定为0x00。
协议数据单元协议数据单元((PDU)格式:
SAE J1939-21规范规定两种PDU格式:PDU1格式(PS为目标地址)和PDU2格式(PS为组扩展),PDU2为不指定特定目标地址的传输,本标准选用PDU2格式。
长短信 PDU编码
PDU编码有Unicode编码和7bit与8bit编码,具体根据得到数据的格式来解码,unicode编码稍微简单,7bit编码复杂些
VB发送短信使用PDU方式,高手进!
用VB6.0编写手机短信发送,因为手机短消息的发送是以PDU串的形式发送出去的,中文字符以Unicode码来表示,所以在发送中文短消息之前必须首先将中文字符转换为Unicode码,下面的函数将实
因为手机短消息的发送是以PDU串的形式发送出去的,中文字符以Unicode码来表示,所以在发送中文短消息之前必须首先将中文字符转换为Unicode码,下面的函数将实现这个功能。这个函数主要应用到VB自带的一个格式转换函数:ChrW()将中文转换为Unicode码。
PublicFunctionchg(rmsgAsString)AsString
DimtepAsString
DimtempAsString
DimiAsInteger
DimbAsInteger
tep=rmsg
i=Len(tep)
b=i/4
Ifi=b*4Then
b=b-1
tep=Left(tep,b*4)
Else
tep=Left(tep,b*4)
EndIf
chg=""
Fori=1Tob
temp="H"Mid(tep,(i-1)*4 1,4)
chg=chgChrW(CInt(Val(temp)))
Nexti
EndFunction
同上,为了发送以PDU模式发送短消息,必须将手机号码和对方手机号码也转换为PDU格式,下面的函数就是为了实现这种转换:
PublicFunctiontelc(numAsString)AsString
DimtlAsInteger
Dimltem,rtem,ttemAsString
DimtiAsInteger
ttem=""
tl=Len(num)
Iftl<>11Andtl<>13Then
MsgBox"wrongnumber."tl
ExitFunction
EndIf
Iftl=11Then
tl=tl 2
num="86"num
EndIf
Forti=1TotlStep2
ltem=Mid(num,ti,1)
rtem=Mid(num,ti 1,1)
Ifti=tlThenrtem="F"
ttem=ttemrtemltem
Nextti
telc=ttem
EndFunction
手机号码有两种表示方法:11位和13位(带国家码86),一般手机发送时都是以13位形式表示的,所以以上的函数还有一个功能是自动将11位格式手机号码转换为13位形式,然后再转换为PDU串。
手机短信的发送主要借助于VB的Mscomm控件实现,关于Mscomm控件,前面的技术介绍部分有详细介绍。短信的发送是由AT CMGS指令完成的,采用PDU模式发送,函数代码如下:
Constprex="0891"
Constmidx="11000D91"
Constsufx="000800"
PublicFunctionSendsms(cscaAsString,numAsString,msgAsString)As_Boolean
Dimpdu,psmsc,pnum,pmsgAsString
DimlengAsString
DimlengthAsInteger
length=Len(msg)
length=2*length
leng=Hex(length)
Iflength<16Thenleng="0"leng
psmsc=Trim(telc(csca))
pnum=Trim(telc(num))
pmsg=Trim(ascg(msg))
pdu=prexpsmscmidxpnumsufxlengpmsg
sleep(1)
mobcomm.Output="AT CMGF=0" vbCr
mobcomm.Output="AT CMGS="Str(15 length) vbCr
mobcomm.Output=pduChr$(26)
sleep(1)
Sendsms=True
EndFunction
因为手机同一时间只能处理一件事情,因此这个函数只负责发送短信,关于短信发送成功与否以及阅读短信的部分集中在一起处理。判断手机短信发送成功与否主要由AT CMGS命令执行以后的返回码来决定(可参见前文的AT指令介绍部分)。
为了防止手机因过于繁忙而出错,这里采取了一定的方法让手机有充分的时间处理发送和接收及删除等操作。Sleep()函数正是为此而设计的,在发送及删除操作后都会让程序暂停一秒,这样就不至于使得手机过于繁忙。
Unicode码解码函数
相比于手机短信的发送而言,手机短信的接收主要的工作正好与之相反。手机短信的发送需要将待发送的短信内容转换为Unicode码,而短信的接收则需要将接收到的Unicode码转换成中文字符。下面的函数将实现解码功能。同手机短信发送的编码函数一样,这里也应用了一个VB内置的函数AscW()函数来将Unicode码转换为中文:
PublicFunctionascg(smsgAsString)AsString
Dimsi,sbAsInteger
DimstmpAsInteger
DimstempAsString
sb=Len(smsg)
ascg=""
Forsi=1Tosb
stmp=AscW(Mid(smsg,si,1))
IfAbs(stmp)<127Then
stemp="00"Hex(stmp)
Else
stemp=Hex(stmp)
EndIf
ascg=ascgstemp
Nextsi
ascg=Trim(ascg)
EndFunction
2手机短信接收函数
相对于短信的发送函数而言,短信的接收相当简单,只需要以下的三行代码就完成了。但是它使用的技术却决不比短信的发送少,这里主要用到了Mscomm控件的Output属性和AT CMGR指令。
PublicSubreadsms(rnumAsString)
mobcomm.Output="AT CMGF=1" vbCr
mobcomm.Output="AT CMGR="rnum vbCr
EndSub
如何把短信中心号码转成PDU格式呢?
进入这个网站:,在页面下面找到界面:
在SMSC框中输入你的短信中心号码,然后点下面的Convert,则PDU格式会在右边框中生成,然后取前18位,如我的短信中心号码的PDU格式为:0891683108501505F0,再把这18位字符输入到 手机 中的SMSC框中,点后面的“更新”即可。
text模式和pdu模式的区别
发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A B C D E F G H I J K L M十三项组成。
1.Text Mode是纯文本方式,可使用不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区。
2.PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。Text Mode比较简单,而且不适合做自定义数据传输,
关于pdu格式c代码和pdu报文格式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
- 上一篇:倒计时图片轮播代码(时间倒计时图)
- 下一篇:体检正常代码(体检报告码是什么)
相关推荐
- 05-06dz论坛自动回帖代码(discuz自动发帖)[20240506更新]
- 05-06短信攻击代码(短信攻击网站)[20240506更新]
- 05-06c代码库网站(c语言开源代码网站)[20240506更新]
- 05-06源代码高亮输出html(高亮显示代码)[20240506更新]
- 05-06合作伙伴网页代码(合作伙伴网页代码是多少)[20240506更新]
- 05-06gif怎么转代码(如何转为gif)[20240506更新]
- 05-06java图书馆管理系统代码(图书馆管理系统开源代码java)[20240506更新]
- 05-06canny边缘检测matlab代码(基于matlab的边缘检测)[20240506更新]
- 05-05qq木马代码(木马软件下载)[20240505更新]
- 05-05jquery代码点击复制(jquery复制对象及事件)[20240505更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接