求手机短信PDU编码的7-bit解码

zjgsteven 2004-08-03 11:06:44
自己做出了UCS2编码解码就是做不出7-bit解码
请参见
http://dev.csdn.net/develop/article/17/17465.shtm
但这个是C版,搞不懂呀。
请指点。
...全文
167 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjgsteven 2004-08-03
  • 打赏
  • 举报
回复
好像不太对吧,7-bit是全英文状态的如短信内容是“TJGM”它们对应的16进制分别是54 4A 47 4D分成2进制是1010100 10010010 1000111 1001101 然后再压缩补位(见http://dev.csdn.net/develop/article/17/17465.shtm中7-bit图)得到01010100 11100101 10110001 1001分别对应16进制的54 E5 B1 09
发出短信后手机收到的短信内容应该是54E5B109,现在是怎么把54E5B109还源到544A474D,然后再还原成短信内容“TJGM”???
叶子哟 2004-08-03
  • 打赏
  • 举报
回复
C#.Net 里面实现字符的编码和解码——

#region 生成字符(含英文)引用码
/// <summary>
/// 生成unicode实体引用的wap字符串,所有汉字均由此转换
/// </summary>
/// <param name="s_Chinese">中文字符串,可夹英文</param>
/// <returns></returns>
protected string Gen_Unicode(string s_Chinese)
{
string s_retu="";
char[] c_chars=s_Chinese.ToCharArray();

for(int i=0;i<c_chars.Length;i++)
{
s_retu+="&#x" + ((short)c_chars[i]).ToString("X")+ ";";
}

return s_retu;
}
/// <summary>
/// 把 WAP 代码转换为字符(中文字符串,可夹英文)
/// </summary>
protected string Gen_Chinese(string s_Unicode)
{
string s_retu="";
string s1="";
string s2="";
byte[] array = new byte[2];
char []spar={';'};
string []chinese = s_Unicode.Split(spar);
int count=chinese.Length;
if(count>0)
{
for(int i=0;i<count;i++)
{
string s_tmp=chinese[i].Trim();
if(s_tmp!="")
{
// s_tmp=s_tmp.Substring(4);
if(s_tmp.Length>=4)
{
s1 = s_tmp.Substring(0,2);
s2 = s_tmp.Substring(2,2);
array[0] = (byte)Convert.ToInt32(s1,16);
array[1] = (byte)Convert.ToInt32(s2,16);
s_retu =s_retu + System.Text.Encoding.BigEndianUnicode.GetString(array);
}
else //英文的
{
// s1 = s_tmp.Substring(0,2);
s1 = "00";
s2 = s_tmp;
array[0] = (byte)Convert.ToInt32(s1,16);
array[1] = (byte)Convert.ToInt32(s2,16);
s_retu =s_retu + System.Text.Encoding.BigEndianUnicode.GetString(array);
}
}

}

}
return s_retu;
}
/// <summary>
/// 把字符转换为双字节的 hex
/// </summary>
/// <param name="s_Chinese">中文字符串,可夹英文</param>
protected string Gen_Hex(string s_Chinese)
{
string s_retu="";
char[] c_chars=s_Chinese.ToCharArray();

for(int i=0;i<c_chars.Length;i++)
{
string hex=((short)c_chars[i]).ToString("X");
if(hex.Length==2)//如果是单字节的则转换为双字节的字符
hex = "00" + hex;
s_retu+=hex;
}

return s_retu;
}
/// <summary>
/// 把 hex 代码转换为字符(中文字符串,可夹英文)
/// </summary>
protected string Gen_CharFromCode(string code)
{
string s = "";
for(int i=0;i<code.Length;i+=4)
{
string s1 = code.Substring(i,2);
string s2 = code.Substring(i+2,2);

int t1 = Convert.ToInt32(s1,16);
int t2 = Convert.ToInt32(s2,16);
byte[] array = new byte[2];

array[0] = (byte)t1;
array[1] = (byte)t2;

s += System.Text.Encoding.BigEndianUnicode.GetString(array);
}
return s;
}

#endregion

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧