// 8-bit解码
nDstLength = gsmString2Bytes(pSrc, buf, tmp * 2); // 格式转换我发觉此处格式转换有问题,导致8BIT信息解码都为空,这是为什么?
// 可打印字符串转换为字节数据
// 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}
// pSrc: 源字符串指针
// pDst: 目标数据指针
// nSrcLength: 源字符串长度
// 返回: 目标数据长度
int CSms::gsmString2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength)
{
for(int i=0; i<nSrcLength; i+=2)
{
// 输出高4位
if(*pSrc>='0' && *pSrc<='9')
{
*pDst = (*pSrc - '0') << 4;
}
else
{
*pDst = (*pSrc - 'A' + 10) << 4;
} pSrc++; // 输出低4位
if(*pSrc>='0' && *pSrc<='9')
{
*pDst |= *pSrc - '0';
}
else
{
*pDst |= *pSrc - 'A' + 10;
} pSrc++;
pDst++;
}// 返回目标数据长度
return nSrcLength / 2;
}
nDstLength = gsmString2Bytes(pSrc, buf, tmp * 2); // 格式转换我发觉此处格式转换有问题,导致8BIT信息解码都为空,这是为什么?
// 可打印字符串转换为字节数据
// 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}
// pSrc: 源字符串指针
// pDst: 目标数据指针
// nSrcLength: 源字符串长度
// 返回: 目标数据长度
int CSms::gsmString2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength)
{
for(int i=0; i<nSrcLength; i+=2)
{
// 输出高4位
if(*pSrc>='0' && *pSrc<='9')
{
*pDst = (*pSrc - '0') << 4;
}
else
{
*pDst = (*pSrc - 'A' + 10) << 4;
} pSrc++; // 输出低4位
if(*pSrc>='0' && *pSrc<='9')
{
*pDst |= *pSrc - '0';
}
else
{
*pDst |= *pSrc - 'A' + 10;
} pSrc++;
pDst++;
}// 返回目标数据长度
return nSrcLength / 2;
}
解决方案 »
- 能否在vc6编写的win32 dll里,使用OnTimer函数?若能,怎么用?
- TCP 协议解析(服务端接受数据问题)
- 在获得一个activex的窗口句柄之后,在它上面进行一些GDI操作会导致异常?
- 求助:滚动条问题:
- 下面的工程类如何修改,一个类被不同的文件使用!
- 有没有开源的C/S网络程序啊,我想学习一下
- 如何编程控制 “串口、并口 或者 USB接口”某个针脚的输出电平?
- 如何判断用户端是否注册了MSFlexGrid控件
- 怎么在CDialog 中嵌入CView
- VC6.0出现了个奇怪的问题,请大家帮我看看!
- 如何让VC编译的EXE文件最小
- 请问不同机器上的那些文件可能造成这种内存处理上的问题?
{
char temp[3];
for(int i=0; i<nSrcLength / 2; i++)
{
temp[0] = pSrc[i*2];
temp[1] = pSrc[i*2+1];
pDst[i] = (char)strtoul(temp, NULL, 16);
} return nSrcLength / 2;
}
#include <afx.h>unsigned char * gsmString2Bytes(const char* pSrc,int nSrcLength)
{
int temp1=0,temp2=0;
unsigned char* pDst=new unsigned char[nSrcLength+1];
memset(pDst,0,nSrcLength+1);
for (int i=0;i<nSrcLength;i++)
{
if (pSrc[i*2]>='0' && pSrc[i*2]<='9') temp1=(int)pSrc[i*2]-48;
if (pSrc[i*2]>='a' && pSrc[i*2]<='f') temp1=(int)pSrc[i*2]-87;
if (pSrc[i*2]>='A' && pSrc[i*2]<='F') temp1=(int)pSrc[i*2]-55;
if (pSrc[i*2+1]>='0' && pSrc[i*2+1]<='9') temp2=(int)pSrc[i*2+1]-48;
if (pSrc[i*2+1]>='a' && pSrc[i*2+1]<='f') temp2=(int)pSrc[i*2+1]-87;
if (pSrc[i*2+1]>='A' && pSrc[i*2+1]<='F') temp2=(int)pSrc[i*2+1]-55;
pDst[i]=temp1*16+temp2;
}
return pDst;
}
void main()
{
char* a="D2F4C0D6BAD0BAC3D0C4B7D6CAD6";
CString str=a;
int nSrcLength=str.GetLength()/2;
cout<<gsmString2Bytes(a,nSrcLength)<<endl;
}
2 "D2F4C0D6BAD0BAC3D0C4B7D6CAD6"表示“音乐盒好心分手”这七个汉字的对应编码;
3 这段代码在我的机器上(XP系统,VC++ 6)上运行通过;
4 代码中有内存泄露,我没时间了,自己再改善一下。