行编码,它们是7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可“压缩”成7个;8-bit编码通常用于发送数据消息,比如
图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。 需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM 03.42所建议的压缩算法(TP-DCS的高3位为001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。 采用spcom 通信控件 网上可
下载 //发送开始定义 procedure Tmainform.bsSkinButton34Click(Sender: TObject);varphonenum:string;i:integer;begin//检查 if (not bsSkinCheckRadioBox1.Checked) and (trim(SMSPHONE.Lines[0])='') then begin ShowMessage('请选择要要发送的对象!或输入要发送的手机号!'); exit; end; if length(bsSkinMemo3.Lines[0])<1 then begin ShowMessage('请先输入要发送的内容!'); exit; end;IniSMSA();//第一次发送前初始化端口一次 ATCOMMAND:='';bsSkinGauge1.MaxValue:=0;bsSkinGauge1.Value:=0;//启动定时器开始发送 Timer1.Enabled:=True;end; //经测试,用定时器控制效果较为理想不会发生阻塞。 //初始化 主要读参数 例短信中心号等 id序列 procedure Tmainform.IniSMSA();vari:integer;SendData : string;userinfo:TIniFile;begin userinfo:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'userinfo.ini'); ComPort:=userinfo.ReadString('ComConfig','ComPort','1'); BaudRate:=userinfo.ReadString('ComConfig','BaudRate','9600'); Parity:=userinfo.ReadString('ComConfig','Parity','n'); DataBits:=userinfo.ReadString('ComConfig','DataBits','8'); StopBits:=userinfo.ReadString('ComConfig','StopBits','1'); SMSC:=userinfo.ReadString('SMSConfig','SMSC','+8613800414500'); SMSMode:=userinfo.ReadString('SMSConfig','SMSMode','Pdu'); userinfo.Free; //SendData := chr(26); // 取消上次结果 SendData := 'AT+CMGF=0' + chr(13); // Pdu if not comm1.WriteCommData(pchar(SendData),Length(SendData)) then sendflag:=false else&