VC中的CString字符串转7bit编码输出

zhuweiping2003 2009-05-21 01:46:42
VC中,CString字符串取自 控件EDIT 中 用户输入的 字符串 (仅仅数字或/和英文字母)
怎么转换为7bit的编码字符串输出?

提供 算法 、代码 、思路 都可以 。。。

谢谢
...全文
258 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuweiping2003 2009-07-16
  • 打赏
  • 举报
回复
忙到现在才有一点时间

7楼的 经过测试 你的完全OK
谢谢
zhuweiping2003 2009-05-21
  • 打赏
  • 举报
回复
楼上各位仁兄
我会尽快测试上述代码。。先谢谢。。。
stephenxu111 2009-05-21
  • 打赏
  • 举报
回复
找了一个给你:
// 7bit编码
// 输入: pSrc - 源字符串指针
// nSrcLength - 源字符串长度
// 输出: pDst - 目标编码串指针
// 返回: 目标编码串长度
int gsmEncode7bit(const char* pSrc, unsigned char* pDst, int nSrcLength)
{
int nSrc; // 源字符串的计数值
int nDst; // 目标编码串的计数值
int nChar; // 当前正在处理的组内字符字节的序号,范围是0-7
unsigned char nLeft; // 上一字节残余的数据

// 计数值初始化
nSrc = 0;
nDst = 0;

// 将源串每8个字节分为一组,压缩成7个字节
// 循环该处理过程,直至源串被处理完
// 如果分组不到8字节,也能正确处理
while (nSrc < nSrcLength)
{
// 取源字符串的计数值的最低3位
nChar = nSrc & 7;

// 处理源串的每个字节
if(nChar == 0)
{
// 组内第一个字节,只是保存起来,待处理下一个字节时使用
nLeft = *pSrc;
}
else
{
// 组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节
*pDst = (*pSrc << (8-nChar)) | nLeft;

// 将该字节剩下的左边部分,作为残余数据保存起来
nLeft = *pSrc >> nChar;

// 修改目标串的指针和计数值
pDst++;
nDst++;
}

// 修改源串的指针和计数值
pSrc++;
nSrc++;
}

// 返回目标串长度
return nDst;
}



调用类似于下面:

CString strSrc;//存放要转换的字符串
char buf[256];//转换结果的存放位置

int nRes = gsmEncode7bit(strSrc.getBuffer(0),buf,strSrc.getLength());
biweilun 2009-05-21
  • 打赏
  • 举报
回复
GSM -7?
stephenxu111 2009-05-21
  • 打赏
  • 举报
回复
你从网上找一个GSM7bit算法的函数,把CString的内容和长度传给它,立马搞定。注意这个主要用于英文可见字符的转换。

以前很多教人编短信发送程序的样历都含有这个转换函数。
jameshooo 2009-05-21
  • 打赏
  • 举报
回复
utf-7?
skyge 2009-05-21
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20021112/09/1168453.html


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
{
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);
}
用户 昵称 2009-05-21
  • 打赏
  • 举报
回复
我写过一篇VB的解压缩文章,vc下操作更简单,全是移位而已。

vb解压缩gsm短信
healer_kx 2009-05-21
  • 打赏
  • 举报
回复
不懂。。。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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