wow-hex16进制操作说明

wow-hex文件说明

  • 项目地址:https://gitee.com/wow-iot/wow-iot7
  • 本文件的的功能主要用于处理十六进制数据相关操作,包含数组之间的转换、16进制打印数组内容;

数组转16进制字符串

int ByteArray2HexStr(const uint8_t* pu8Idata, size_t snIlen, uint8_t* pu8Odata, size_t snOlen)
{
	int i;
	char hexval[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

	
	CHECK_RET_VAL_P(pu8Idata && pu8Odata,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");
	CHECK_RET_VAL_P(snOlen >= 2*snIlen,-PARAM_INPUT_ARG_INVALID,"param input size invalid!\n");

	for (i = 0; i < snIlen; i++) {
		pu8Odata[i * 2] = hexval[((pu8Idata[i] >> 4) & 0xF)];
		pu8Odata[(i * 2) + 1] = hexval[(pu8Idata[i]) & 0x0F];
	}

	return WOW_SUCESS;
}

16进制字符串转数组

int HexStr2ByteArray(const uint8_t* pu8Idata, size_t snIlen, uint8_t* pu8Odata, size_t snOlen)
{
	int  i;
	char ch;

	CHECK_RET_VAL_P(pu8Idata && pu8Odata,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n");
	CHECK_RET_VAL_P(snOlen >= snIlen/2,-PARAM_INPUT_ARG_INVALID,"param input size invalid!\n");

	for (i = 0; i < snIlen/2; i++) 
	{
		ch = pu8Idata[i * 2];
		if (ch >= '0' && ch <= '9'){
			pu8Odata[i] = (char)(ch - '0');
		}
		else if (ch >= 'A' && ch <= 'F'){
			pu8Odata[i] = (char)(ch - 'A' + 10);
		}
		else if (ch >= 'a' && ch <= 'f'){
			pu8Odata[i] = (char)(ch - 'a' + 10);
		}
		else{
			return -PARAM_INPUT_DATA_ERROR;
		}
	  	
		ch = pu8Idata[i * 2 + 1];
		if (ch >= '0' && ch <= '9'){
			pu8Odata[i] = (char)((pu8Odata[i] << 4) + (ch - '0'));
		}
		else if (ch >= 'A' && ch <= 'F'){
			pu8Odata[i] = (char)((pu8Odata[i] << 4) + (ch - 'A' + 10));
		}
		else if (ch >= 'a' && ch <= 'f'){
			pu8Odata[i] = (char)((pu8Odata[i] << 4) + (ch - 'a' + 10));
		}  
		else{
		 	return -PARAM_INPUT_DATA_ERROR;
		}
	 	
	}

	return WOW_SUCESS;
}
以十六进制打印数组内容
 void wow_hex_print(uint8_t* pu8Data, int nLen)
{
	int with_space = 1;
	uint8_t *i, *j;
	uint8_t* buff = (uint8_t*)malloc(nLen * 3 + 1);
	CHECK_RET_VOID(buff);

	const char HEX_MAP[] = "0123456789abcdef";
	
	for(i = pu8Data, j = buff; i < pu8Data + nLen; i++){
		*j++ = HEX_MAP[*i >> 4 & 0xF];
		*j++ = HEX_MAP[*i & 0xF];
		if(with_space)
			*j++ = ' ';
	}
	*j = '\0';

	printf("%s\n",buff);
	
	free(buff);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值