????????提供一个 C 语言的功能函数,可以将字符串转为整形数据,输入可以是16进制的字符串 如:0x140ED8;或者十进制的字符串 如:1314520,函数输出就是整形数据。
#define IS_CAP_LETTER(c) (((c) >= 'A') && ((c) <= 'F'))
#define IS_LC_LETTER(c) (((c) >= 'a') && ((c) <= 'f'))
#define IS_09(c) (((c) >= '0') && ((c) <= '9'))
#define ISVALIDHEX(c) (IS_CAP_LETTER(c) || IS_LC_LETTER(c) || IS_09(c))
#define ISVALIDDEC(c) IS_09(c)
#define CONVERTDEC(c) (c - '0')
#define CONVERTHEX_ALPHA(c) (IS_CAP_LETTER(c) ? ((c) - 'A'+10) : ((c) - 'a'+10))
#define CONVERTHEX(c) (IS_09(c) ? ((c) - '0') : CONVERTHEX_ALPHA(c))
/**
* @brief Convert a string to an integer 将字符串转换为整数
* @param pInputStr: The string to be converted 要转换的字符串
* @param pIntNum: The integer value 整数值
* @retval 1: Correct 正确
* 0: Error 错误
*/
uint32_t Str2Int(uint8_t *pInputStr, uint32_t *pIntNum)
{
uint32_t i = 0U;
uint32_t res = 0U;
uint32_t val = 0U;
if ((pInputStr[0U] == '0') && ((pInputStr[1U] == 'x') || (pInputStr[1U] == 'X'))) //16进制字符串输入
{
i = 2U;
while ((i < 11U) && (pInputStr[i] != '\0'))
{
if (ISVALIDHEX(pInputStr[i]))
{
val = (val << 4U) + CONVERTHEX(pInputStr[i]);
}
else
{
/* Res = 0, Invalid input */
break;
}
i++;
}
/* valid result */
if (pInputStr[i] == '\0')
{
*pIntNum = val;
res = 1U;
}
}
else /* max 10-digit decimal input 最大 10 位十进制输入*/
{
while ((i < 11U) && (res != 1U))
{
if (pInputStr[i] == '\0')
{
*pIntNum = val;
/* return 1 */
res = 1U;
}
else if (((pInputStr[i] == 'k') || (pInputStr[i] == 'K')) && (i > 0U))
{
val = val << 10U;
*pIntNum = val;
res = 1U;
}
else if (((pInputStr[i] == 'm') || (pInputStr[i] == 'M')) && (i > 0U))
{
val = val << 20U;
*pIntNum = val;
res = 1U;
}
else if (ISVALIDDEC(pInputStr[i]))
{
val = val * 10U + CONVERTDEC(pInputStr[i]);
}
else
{
/* return 0, Invalid input */
res = 0U;
break;
}
i++;
}
}
return res;
}