手机短信息SMS开发—编码,解码

2024-02-21 08:38

本文主要是介绍手机短信息SMS开发—编码,解码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

手机短信息SMS开发编码,解码

1、  英文编码

缺省的GSM字符集为7位编码,ASCII码为8位编码,编码就是将8ASCII编码转换为7位编码。

例如:1234 编码后得到31D98C06

2进制表示

8位编码 00110001 00110010 00110011 00110100

7位编码 00110001 11011001 10001100 00000110

通过例子可以看出,将ascii8位编码的Bit8去掉,依次将下7位编码的后几位逐次移到前面,形成新的8位编码。

以下是C++Builder的实现代码:

String __stdcall EncodeEnglish(String InputStr)

{

        int n,len,cur;

        String tempstr,returnstr;

        unsigned char mid1[2],mid2[2];

        len=InputStr.Length();

        n=0;

        for(int i=1;i<=len;i++)

        {

           if (i < FONT>

           {

             strcpy(mid1,InputStr.SubString(i,1).c_str());

             strcpy(mid2,InputStr.SubString(i+1,1).c_str());

             cur=(mid1[0]>>n)|((mid2[0]<<(7-n))& 0xff);

           }

           else

           {

             strcpy(mid1,InputStr.SubString(i,1).c_str());

             cur=(mid1[0]>>n)& 0x7f;

           }

           FmtStr(tempstr,"%2.2X",ARRAYOFCONST((cur)));

           returnstr=returnstr+tempstr;

           n=(n+1)%7;

           if (n==0)

                   i++;

             }

return returnstr;

}

2、  英文解码

简单地说就是将7位字符编码转换为8为字符编码

以下是C++Builder的实现代码:

int ReturnHex(int Value)

{

        switch (Value)

        {

          case 0:

                Value=0x7f;

                break;

          case 1:

                Value=0x3f;

                break;

          case 2:

                Value=0x1f;

                break;

          case 3:

                Value=0x0f;

                break;

          case 4:

                Value=0x07;

                break;

          case 5:

                Value=0x03;

                break;

          case 6:

                Value=0x01;

                break;

          case 7:

                Value=0x00;

                break;

        }

        return Value;

}

String __stdcall DecodeEnglish (String InputStr)

{

        unsigned char InStr[300];

        char OutStr[300];

        String str;

        int j=0,i=0;

        int Point=0;

        int temp;

        memset(InStr,0,301);

        memset(OutStr,0,301);

        for(int i=0;i < FONT>

        {

                str="0x"+InputStr.SubString(i+1,2);

                InStr[i/2]=StrToInt(str);

        }

        while(j<=InputStr.Length()/2)

        {

                if(Point==0)

                        OutStr[i]=InStr[j]&ReturnHex(Point);

                else

OutStr[i]=((InStr[j]&ReturnHex(Point))< >(8-Point));

                if(Point%7==0&&Point!=0)

                        Point=0;

                else

                        Point=Point+1;

                i++;

                j=i-(i/8);

 

        }

        OutStr[12]=((InStr[12]&0x07)<<5)|(InStr[11]>>(8-5));

        return AnsiString(OutStr);

}

3、  中文编码

中文编码较为简单,就是将GB2312的中文编码转换为代码页为CP936Unicode编码即可

以下是C++Builder的实现代码

String  EncodeChinese(String InputStr)

{

             int cur;

String tempstr,returnstr;

WideString ws;

wchar_t  mid[2];

ws=WideString(InputStr);

for(int i=1;i<=ws.Length();i++)

{

wcscpy(mid,ws.SubString(i,1).c_bstr());

cur=mid[0];

FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur)));

returnstr=returnstr+tempstr;

}

return returnstr;

}

4、  中文解码

将代码页为CP936Unicode编码转换为GB2312的中文编码即可

 

以下是C++Builder的实现代码

String  DecodeChinese(String InputStr)

{

        wchar_t Buf[300];

        for(int i=0;i < FONT>

        {

                Buf[i/4]=StrToInt("0x"+InputStr.SubString(i+1,4));

        }

        Buf[InputStr.Length()/4]=0;

        return WideCharToString(Buf);

}

这篇关于手机短信息SMS开发—编码,解码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/731176

相关文章

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis