一个字符串转换成字节数组的函数
最近因为工作需要,需要一些字符串装换成字符数组的方法。网上查了一下,没有现成的,只好自己写一个。必须能做到过滤字符串中的错误字符,以及非法字符。
必须能实现如下过滤,并且有字符串溢出判断,比如:
"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]