/*****************************************************************************
函 数 名 : 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;
}