字符串转为16进制数

/*****************************************************************************
 函 数 名  : HexStrToByte
 功能描述  : 将字符串转化为16进制数 #include 
 输入参数  : const char* source : 需要转化的字符串。 unsigned char* dest转化后的数组, int sourceLen字符串的长度
 输出参数  : 
 返 回 值  : 
 调用函数  :
 被调函数  :
*****************************************************************************/
void HexStrToByte(const char* source, unsigned char* dest, int sourceLen)
{
    short i;
    unsigned char highByte, lowByte;

    for (i = 0; i < sourceLen; i += 2)
    {
        highByte = toupper(source[i]);
        lowByte  = toupper(source[i + 1]);
        if (highByte > 0x39)
            highByte -= 0x37;
        else
            highByte -= 0x30;

        if (lowByte > 0x39)
            lowByte -= 0x37;
        else
            lowByte -= 0x30;

        dest[i / 2] = (highByte << 4) | lowByte;
    }
    return ;
}

自己创建的函数

/*****************************************************************************
 函 数 名: AscValue
 功能描述  : 根据ASCII来得到字符转化为数据需要加减的值
 输入参数  : char c
 输出参数  : 
 返 回 值: value
 调用函数  :
 被调函数  :
*****************************************************************************/

UINT32 AscValue(char c)
{
        UINT32 value;
        if((c >= '0') && (c <= '9'))
                value = 48;
        else if ((c >= 'a') && (c <='f'))
                value = 87;
        else if ((c >= 'A') && (c <='F'))
                value = 55;
        else {
                ssp_log_printf(MID_MSDK_API, SSP_LOG_LEVEL_NONE, "invalid data %c",c);
                return -1;
        }
        return value;
}

/*****************************************************************************
 函 数 名: StrToHex
 功能描述  : 把请求数据带的payload,进行文本格式转化成16进制格式
 输入参数  : UCHAR *str, UCHAR *hex_data, USHORT request_length
 输出参数  : 
 返 回 值: len/2
 调用函数  :
 被调函数  :
*****************************************************************************/

UINT32 StrToHex(coap_pdu_t *request, UCHAR *hex_data)                
{                                                  
        USHORT len = 0;
        USHORT payload_len = 0;
        USHORT data_len = 0;
        UINT32 com_data = 0;                                   
        UINT32 high = 0;                                  
        UINT32 low = 0;                                   
        UINT32 value = 0;
        UCHAR *str = request->data;
        
        len = (unsigned char *)request->hdr + request->length - request->data;
        if(len % 2)
        {
            ssp_log_printf(MID_MSDK_API, SSP_LOG_LEVEL_NONE, "erro data number : len---->: %d", len);
        }else{
            ssp_log_printf(MID_MSDK_API, SSP_LOG_LEVEL_NONE, "len---->: %d", len);
        }
        
        for(UINT32 i = 0; i < len; i++)
        {
                value = AscValue(str[i]);
                high = (((str[i] - value)&0xF)<<4);
                value = AscValue(str[i + 1]);
                low = ((str[i + 1] - value)&0xF);
                com_data = high | low;
                data_len = i / 2;
                hex_data[data_len] = com_data;
                i = i + 1;
        }
        
        return len/2;
}

你可能感兴趣的:(C语言特性)