- 论坛徽章:
- 0
|
- DWORD StrToBcd(char* pchStr,DWORD dwStrLen,BYTE* pbyBcd,PDWORD pdwBcdLen)
- {
- DWORD i = 0;
- BYTE* pbyNew = 0;
- DWORD dwNewLen = 0;
- DWORD dwRet = 0;
- if( pchStr == 0 ||
- pdwBcdLen == 0 ||
- dwStrLen == 0)
- {
- dwRet = ERROR_INVALID_PARAM;
- goto Leave_AscToBcd;
- }
-
- dwNewLen = (dwStrLen>>1) + 1;
- pbyNew = new BYTE[dwNewLen];
- if(pbyNew == 0)
- {
- dwRet = ERROR_NEW_FAILED;
- goto Leave_AscToBcd;
- }
- memset(pbyNew,0,dwNewLen);
- dwNewLen = 0;
- for(i = 0;i < dwStrLen;)
- {
- if(*pchStr == 0x20)
- {
- i++;
- pchStr ++;
- continue;
- }
- if( *pchStr > '9' ||
- *pchStr < '0' ||
- *(pchStr+1) > '9' ||
- *(pchStr+1) < '0')
- {
- dwRet = ERROR_PARAM_NO_REGULAR;
- goto Leave_AscToBcd;
- }
-
- pbyNew[dwNewLen++] = (((BYTE)(*pchStr - '0'))<<4) | ((*(pchStr+1) - '0')&0x0F);
- i += 2;
- pchStr += 2;
- }
- if(pbyBcd == 0)
- {
- *pdwBcdLen = dwNewLen;
- dwRet = ERROR_OK;
- goto Leave_AscToBcd;
- }
- if(*pdwBcdLen < dwNewLen)
- {
- dwRet = ERROR_BUFFER_SMALL;
- goto Leave_AscToBcd;
- }
- memcpy(pbyBcd,pbyNew,dwNewLen);
- *pdwBcdLen = dwNewLen;
- dwRet = ERROR_OK;
- Leave_AscToBcd:
- if(pbyNew != 0)
- {
- delete []pbyNew;
- pbyNew = 0;
- }
- return dwRet;
- }
复制代码 |
|