倾情奉献,实现电脑接收和发送中文短信的核心源码!!!!!!!!!!!

ivt 2003-06-20 12:04:18
其实也是一个加密码算法,具体
算法请参照网上相关资料。
'将8bit转为7bit
'E8 32 9B FD 46 97 D9 EC 37
Public Function Encrypt7To8(strSource As String) As String
Dim StrHex As String
Dim strRe As String
Dim StrBinary As String
Dim LngLength As Integer
Dim IntFirst As Integer
Dim newStrBinary As String
Dim newStrHex As String
Dim strResult As String

LngLength = Len(strSource)
StrHex = StringToHex(strSource) '16
strRe = StrRecovent(StrHex) '反转
StrBinary = From16To2(strRe, True) '16 to 2 7bit

IntFirst = 8 - (LngLength Mod 8)
If IntFirst <> 8 Then
newStrBinary = VBA.Right("00000000" & VBA.Left(StrBinary, IntFirst), 8) & VBA.Right(StrBinary, Len(StrBinary) - IntFirst)
Else
newStrBinary = StrBinary
End If

'2 to 16 8bit
newStrHex = From2To16(newStrBinary)
''反转
strResult = StrRecovent(newStrHex)

Encrypt7To8 = strResult
End Function

Public Function Decrypt8To7(strSource As String) As String
Dim intLength As Integer
Dim strRe As String
Dim strResult As String
Dim StrBinary As String
Dim newStrBinary As String
Dim Str8 As String
Dim newStrHex As String
Dim newRe As String
Dim strTemp As String
Dim i As Integer

intLength = Len(strSource) / 2
strRe = StrRecovent(strSource) '反转
StrBinary = From16To2(strRe, False) '16 to 2 8bit

If Len(StrBinary) Mod 7 <> 0 Then
'VBA.Right("0000000" & VBA.Left(StrBinary, (Len(StrBinary) Mod 7)), 7) &
newStrBinary = VBA.Right(StrBinary, (Len(StrBinary) - (Len(StrBinary) Mod 7)))
Else
newStrBinary = StrBinary
End If


Str8 = StrRe7to8(newStrBinary)
'2 to 16
newStrHex = From2To16(Str8)
''反转
newRe = StrRecovent(newStrHex)
''转为字符
For i = 1 To Len(newRe) / 2
strTemp = ChrW(CInt(Val("&H" & VBA.Mid(newRe, (i - 1) * 2 + 1, 2))))
strResult = strResult & strTemp
Next

Decrypt8To7 = strResult
End Function
...全文
43 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ivt 2003-06-24
  • 打赏
  • 举报
回复
To: GetWindowPos(阿汪) ( ) 信誉:64
也许你个人认为这只是一个压缩或者是个
加密算法罢了,但我想
如果用这手机收发短信上,它不单单是个算法。
只要是它是一种标准规则,没有这个规则我们不能
成功发送和接收短信。
vbnewer 2003-06-24
  • 打赏
  • 举报
回复
还有几个函数没有定义?
老人参 2003-06-21
  • 打赏
  • 举报
回复
up

厉害
qingming81 2003-06-21
  • 打赏
  • 举报
回复
UP:厉害!!!!!!!
previewer1024 2003-06-21
  • 打赏
  • 举报
回复
To:GetWindowPos(阿汪)
GSM只支持ASCII码值从0X00到0X7F的128个字符,这些值只需要7bit去定义,而SMS报文是以8bit字节序列传输的,故GSM使用一种编码方式将7bitASCII码值序列压缩成8bit字节序列。

其他的操作只是调用规定的命令就行了,所以说压缩字符就是核心,呵呵
ssihc 2003-06-21
  • 打赏
  • 举报
回复
up
收藏
GetWindowPos 2003-06-21
  • 打赏
  • 举报
回复
为什么用手机发短信时,不用压缩直接就发送字符串对方就能看到?
victorppy 2003-06-20
  • 打赏
  • 举报
回复
关注。是否可以把代码发给我看看?
yuhpvct@hotmail.com
谢谢
ffish——胖胖鱼
VirtualDesktop 2003-06-20
  • 打赏
  • 举报
回复
up
GetWindowPos 2003-06-20
  • 打赏
  • 举报
回复
有没有搞错??????把字符串加密部分当成中短信发送的核心源码?!
那WINDOWS XP的核心源码岂不是图片处理???
previewer1024 2003-06-20
  • 打赏
  • 举报
回复
我也贴一个,不过是用VC写的,楼主要写文章也可以加进去,不过要著名出处啊,呵呵
PSTR CShortMDlg::DataToStr(char *Databuf)
{
//8个字符为一段;
/*把每个字符要移到前一字符(第一字符除外)的位算出 */
int DataLen;
char DataTemp[200];
int i;
BYTE ChY[50],ChM[50],ChYM[50]; //依次为字符的HEX表示,与字符相与的数,移位后的数
BYTE Dest,Ch;
CString DataDest;
int Hi,Li;

sprintf(DataTemp,"%s",Databuf);
DataLen=strlen(DataTemp);

for (i=0;i<DataLen;i++)
{
Ch=DataTemp[i]; //ASCII码
ChY[i]=Ch & (CalaMe(i%8) - 1); //与该位字符相 与 的数
ChM[i]=Ch >> (i%8); //字符的十六进制移位后的值
ChYM[i]=ChY[i] << (8-(i%8)); //把要移位的数转到最高位

}
for (i=0;i<DataLen-1;i++)
{
if (i==0 || ((i+1) % 8)!=0)
{
Dest=ChYM[i+1]+ChM[i];
Hi=Dest / 16;
Li=Dest % 16;
DataDest=DataDest+DecToHex(Hi)+DecToHex(Li);
}
}
if (ChM[DataLen]!=0)
{
Hi=ChM[DataLen-1] / 16;
Li=ChM[DataLen-1] % 16;
DataDest=DataDest+DecToHex(Hi)+DecToHex(Li);
}

sprintf(Databuf,"%s",DataDest);
return Databuf;
}
ivt 2003-06-20
  • 打赏
  • 举报
回复
如果你觉得以上代码对你有用,请
up一次,谢谢!
本人很早就想整理出身写成相关文章,但
苦于没时间。
GetWindowPos 2003-06-20
  • 打赏
  • 举报
回复
难到发短信的核心是在于怎么压缩字符吗?压缩了字符就能发短信了?
那为什么WINZIP和WINRAR这两只软件不能发短信呢?
previewer1024 2003-06-20
  • 打赏
  • 举报
回复
To:GetWindowPos(阿汪)
你少见多怪,这是用手机模块收发短信,把要发送的字符压缩的算法

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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