博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

字节转换

Posted on 2011-12-04 18:23  ccmfc  阅读(272)  评论(0编辑  收藏  举报

一、宽字节转窄字节

char* wstr2asc(const short *pSrc, char *pDest)
{
char *pTmp=pDest;
char ctmp=0;
short stmp=0;

if (NULL==pSrc)return NULL;

while (*pSrc)
{
ctmp=*pSrc;
stmp=*pSrc;

if (ctmp<0)
{
*pTmp++=stmp;
*pTmp|=(stmp>>=8);
}
else
{
*pTmp=*pSrc;
}
pSrc++;
pTmp++;
}
*pTmp='\0';

return pDest;
}

int wstrlen(const short *pSrc)
{
short *pTmp=(short*)pSrc;

while (*pTmp&&pTmp++);

return pTmp-pSrc;
}

char* wstr2asc(const short *pSrc, const int iSrcLen, char *pDest, const int iDestLen)
{
char *pTmp=pDest;
char ctmp=0;
short stmp=0;
int i=0;
int len=wstrlen(pSrc);
if (NULL==pSrc)return NULL;

len=len>iSrcLen?iSrcLen:len;
len=(len*2)>iDestLen?iDestLen:(len*2);
while (*pSrc && i<len)
{
ctmp=*pSrc;
stmp=*pSrc;

if (ctmp<0)
{
*pTmp++=stmp;
*pTmp|=(stmp>>=8);
i++;
if (i>=len)
{
break;
}
}
else
{
*pTmp=*pSrc;
}
pSrc++;
pTmp++;
i++;
}
*pTmp='\0';

return pDest;
}

 

 

二、窄字节转宽字节

short* asc2wstr(const char *pSrc,short *pDest)
{
short *pTmp = pDest;
short tmp = 0;

if (NULL==pSrc)return NULL;

while(*pSrc)
{
if(*pSrc<0)
{
*pTmp=*(pSrc+1);
*pTmp<<=8;
tmp=*pSrc;
*pTmp|=(tmp&=0x00ff);
pSrc++;
}
else
{
*pTmp=*pSrc;
}
pSrc++;
pTmp++;
}
*pTmp&=0;

return pDest;
}

short* asc2wstr(const char *pSrc, const int iSrcLen, short* pDest, const int iDestLen)
{
short *pTmp = pDest;
short tmp=0;
int len=0;
int i=0;

if (NULL==pSrc)return NULL;

len=strlen(pSrc);
len=len>iSrcLen?iSrcLen:len;
len=len>iDestLen?iDestLen:len;

while(*pSrc && i<len)
{
if(*pSrc<0)
{
*pTmp=*(pSrc+1);
*pTmp<<=8;
tmp=*pSrc++;
*pTmp|=(tmp&=0x00ff);
i++;
if(i>=len)
{
*pTmp&=0x00FF;
pTmp++;
break;
}
}
else
{
*pTmp=*pSrc;
}
pSrc++;
pTmp++;
i++;
}
*pTmp&=0;

return pDest;
}