freeeyes 发表于 2013-1-10 18:10:49

一个字符串转换成字节数组的函数

最近因为工作需要,需要一些字符串装换成字符数组的方法。
网上查了一下,没有现成的,只好自己写一个。必须能做到过滤字符串中的错误字符,以及非法字符。
必须能实现如下过滤,并且有字符串溢出判断,比如:
"ef 010 AD 02 BD"
转换后是
char EF AD 02 BD

"ef 010 AD 02 SD"
转换后是
char EF AD 02

代码如下:在这记录一下。
bool GetChar(unsigned char cTag, unsigned char& cDes)
{
if(cTag >='A'&&cTag <='F')
{
    cDes = cTag - 'A' + 10;
    return true;
}
else if(cTag >='a'&&cTag <='f')
{
    cDes = cTag - 'a' + 10;
    return true;
}
else if(cTag >= '0'&& cTag<= '9')
{
    cDes = cTag-'0';
    return true;
}
else
{
    return false;
}
}

bool ConvertStr2char(const char* pData, unsigned char& cData)
{
if(pData == NULL || strlen(pData) != 2)
{
    return false;
}

char cFirst = pData;
unsigned char cTemp = 0;
bool blStste = GetChar(cFirst, cTemp);
if(false == blStste)
{
    return false;
}
cData = cTemp;
char cSecond = pData;
blStste= GetChar(cSecond, cTemp);
if(false == blStste)
{
    return false;
}
cTemp = cTemp << 4;
cData = cData | cTemp;

return true;
}

bool Convertstr2charArray(const char* pData, int nSrcLen, unsigned char* pDes, int& nMaxLen)
{
char szData = {'\0'};
int nPos         = 0;
int nCurrSize    = 0;
int nConvertSize = 0;
bool blState   = false;   //转换后的字符串是否有效
bool blSrcState= true;    //元字符串是否有效

while(nPos < nSrcLen)
{
    if(pData == '\r' || pData == '\n' || pData == ' ' || nPos == nSrcLen - 1)
    {
      if(nPos == nSrcLen - 1)
      {
      szData = pData;
      }

      szData = '\0';
      if(nConvertSize < nMaxLen && blSrcState == true)
      {
      blState = ConvertStr2char(szData, pDes);
      if(blState == true)
      {
          nConvertSize++;
      }
      }
      nCurrSize= 0;
      blSrcState = true;
      nPos++;
    }
    else
    {
      if(nCurrSize < 2)
      {
         szData = pData;
      }
      else
      {
      blSrcState = false;
      }
      nPos++;
    }
}

nMaxLen = nConvertSize;
return true;
}

测试代码如下:
int main(int argc, char* argv[])
{
char c;
unsigned char s;
int nCurrLen = 10;

sprintf(c, "ef 010 AD 02 BD");
Convertstr2charArray(c, strlen(c), (unsigned char*)s, nCurrLen);

printf("=============================\n");
for(int i = 0; i < nCurrLen; i++)
{
    printf("0x%02X ", s);
}
printf("\n");
printf("=============================\n");

return 0;
}
在Linux下测试通过,符合要求。在这里记录一下。
页: [1]
查看完整版本: 一个字符串转换成字节数组的函数