字符串轉爲16進制數

/*****************************************************************************
 函 數 名  : HexStrToByte
 功能描述  : 將字符串轉化爲16進制數 #include <ctype.h>
 輸入參數  : 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;
}
發佈了54 篇原創文章 · 獲贊 30 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章