手机短信二进制编码转CHAR *字符窜问题,急急急~~~~!
手机发到SP的二进制编码转字符窜,请给代码谢谢~~!一定给高分~!
不够可以再加分~!
问题点数:100、回复次数:12Top
1 楼hyqyyy(飞一样的感觉)回复于 2003-08-04 17:24:44 得分 0
UPTop
2 楼awnucel(西大耻犹未雪,南京恨何时灭&抵制日货)回复于 2003-08-04 17:46:17 得分 20
upTop
3 楼hyqyyy(飞一样的感觉)回复于 2003-08-04 18:08:24 得分 0
谢谢大家UP一下
说明一下,我收到的五位长的二进制码?解出来应该为"120050002"
我用下面的代码解出来是"1200350002"
int strlength;
CString strHex,m_strFileContents;
for (int nIndex = 0; nIndex < length; nIndex++)
{
if (nIndex == 0)
strHex.Format(_T("%2.2X"), pin[nIndex]);
else if (nIndex % 16 == 0)
strHex.Format(_T("\r\n%2.2X"), pin[nIndex]);
else if (nIndex % 8 == 0 )
strHex.Format(_T("-%2.2X"),pin[nIndex]);
else
strHex.Format(_T("%2.2X"), pin[nIndex]);
m_strFileContents += strHex;
}
strlength = m_strFileContents.GetLength();
memcpy(pout,m_strFileContents,strlength);
收到8位的二进制码解出来应该是"12005001#06"可解出来是16位的窜,不知如何作位移
请高手指点Top
4 楼canoe_eyes(阿里)回复于 2003-08-04 18:53:55 得分 20
我很有兴趣试一试,
问:
1. Length 什么意思。
2. 能多给几组数据吗?( 真确的,错误的 );
能够再详细更好了。
ali_bo@eyou.com
谢谢!Top
5 楼hyqyyy(飞一样的感觉)回复于 2003-08-05 13:47:23 得分 0
帮帮忙~~!
1.可以使用base64编码
2.可以使用bin to hex表示
比如
void encode( byte *pin , ulong length , char *pout)
{
char temp_buf[3];
for ( ulong i = 0;i<length;i++)
{
sprintf(temp_buf,"%02x",*(pin+i));
*(pout+i<<1) = temp_buf[0];
*(pout+i<<1+1)=temp_buf[1];
}
}
我查到这个方法可能可行,得最后两句有问题?
可有大侠知道怎么改Top
6 楼dailiangcm(dailiang)回复于 2003-08-05 13:50:45 得分 20
是不是说的PDUTop
7 楼grasshopperliu(老前辈——曾经沧海)回复于 2003-08-05 14:01:18 得分 10
gzTop
8 楼hyqyyy(飞一样的感觉)回复于 2003-08-05 17:02:46 得分 0
UP有分,谢谢Top
9 楼hyqyyy(飞一样的感觉)回复于 2003-08-05 17:20:15 得分 0
UPTop
10 楼kwiner(ak.net)回复于 2003-08-05 17:27:47 得分 30
////////////////////////////////////////////////////////
//功能:将十六进制编码转换成可显字串
//注意:形参字串长度应为4的倍数
bool CShortMessage::PDU2Chinese(CString strPdu,CString& strResult)
{
TCHAR ch,ch2byte;
int iByteCount;
int nSrcLength=strPdu.GetLength();
if (nSrcLength==0)
{
strResult="";
return true;
}
if (nSrcLength<4) //不足4字节
{
for(int i=0;i<4-nSrcLength;i++) strPdu="0"+strPdu; //在前面补0
nSrcLength=4;
}
if (nSrcLength%4!=0) //非完整字节信息
{
return false;
}
iByteCount=0; //一汉字两字节,标志当前处理到第几字节
strPdu.MakeUpper(); //全部改成大写
for(int i=0;i<nSrcLength;i+=2)
{
ch=0;
if (iByteCount==0)
{
ch2byte=0;
}
iByteCount++;
// 输出高4位
if(strPdu[i]>='0' && strPdu[i]<='9')
{
ch = (strPdu[i] - '0') << 4;
}
else
{
ch = (strPdu[i] - 'A' + 10) << 4;
}
// 输出低4位
if(strPdu[i+1]>='0' && strPdu[i+1]<='9')
{
ch |= strPdu[i+1] - '0';
}
else
{
ch |= strPdu[i+1] - 'A' + 10;
}
if(iByteCount==1)
{
ch2byte = ch<<8;
}
else
{
ch2byte |= ch;
iByteCount=0;
strResult+=ch2byte;
}
}
return true;
}Top
11 楼hyqyyy(飞一样的感觉)回复于 2003-08-06 10:42:10 得分 0
kwiner这要的是二进制转字符窜,其中二进制参数为指向二进制数的参数,你能否给出一段代码,谢谢~!!!Top
12 楼hyqyyy(飞一样的感觉)回复于 2003-08-06 17:58:46 得分 0
问题已解决,原来不全是二进制码,中间还杂有ASCII码,得作个判断,谢谢各位~!!!!Top



