C 编码转换

编码格式

1.BIN:binary,二进制的
2.OCT:octal,八进制的
3.HEX:hexadecimal,十六进制的
4.DEC:decimal,十进制的

一、4字节大小端转换

uint32_t ugen_Conversion_32(uint8_t *data)
{
	if (data == NULL)
		return 0;
	uint32_t ret_32 = 0;
	ret_32 = data[3];
	ret_32 = (ret_32 << 8) + data[2];
	ret_32 = (ret_32 << 8) + data[1];
	ret_32 = (ret_32 << 8) + data[0];
	return ret_32;
}

二、HEX 转 ASCII

uint8_t ugen_HexToAscii(uint8_t *hex, uint32_t hex_len, uint8_t *ascii)
{
	if ((ascii == NULL) || (hex == NULL))
		return 0;
	uint32_t i = 0;
	uint8_t hex_temp = 0;
	uint32_t ascii_len = hex_len * 2;
	while (i < ascii_len)
   {
		//每两字节ASCII,取一字节HEX
		if ((i % 2) == 0x00)
			hex_temp = hex[i / 2];
		//判断高4位
		if (hex_temp <= 0x9F)
			ascii[i] = ((hex_temp >> 4) & 0x0F) + '0';
		else if ((hex_temp >= 0xA0) && (hex_temp <= 0xFF))
			ascii[i] = ((hex_temp >> 4) & 0x0F) - 0x0A + 'A';
		
		hex_temp <<= 4; //取高四位
		i++;
    }
	return i;
}

三、ASCII 转 HEX

uint8_t ugen_AsciiToHex(uint8_t *ascii, uint32_t ascii_len, uint8_t *hex)
{
	if ((ascii == NULL) || (hex == NULL))
		return 0;
	uint32_t i = 0;
	while (i < ascii_len)
    {
		//比较ACSII
		if ((ascii[i] >= '0') && (ascii[i] <= '9'))
			hex[i / 2] = (hex[i / 2] << 4) | (ascii[i] - '0');
		else if ((ascii[i] >= 'a') && (ascii[i] <= 'f'))
			hex[i / 2] = (hex[i / 2] << 4) | ((ascii[i] - 'a') + 0x0A);
		else if ((ascii[i] >= 'A') && (ascii[i] <= 'F'))
			hex[i / 2] = (hex[i / 2] << 4) | ((ascii[i] - 'A') + 0x0A);
		else
			return 0; //错误
		i++;
    }
	printf("ugen_AsciiToHex %d\n", TRACE_BINARY(hex, sizeof(hex)));
	return i;
}

四、BCD 转 HEX

void bcd2hex(uint8_t *bcd, uint8_t *hex)
{
	int i;
	for (i = 0; i < 6; i++)
    {
		hex[2 * i] = bcd[i] >> 4;
		if (hex[2 * i] == 0x0F)
		hex[2 * i] = 0xFF;
		hex[(2 * i) + 1] = bcd[i] & 0x0F;
		if (hex[(2 * i) + 1] == 0x0F)
		hex[(2 * i) + 1] = 0xFF;
    }
}

五、HEX 转 BCD

void hex2bcd(uint8_t *hex, uint8_t len)
{
	int i;
	uint8_t temp[6] = {0};
	int odd = len % 2;
	int count = odd ? ((len - 1) / 2) : (len / 2);
	for (i = 0; i < count; i++)
		temp[i] = (hex[2 * i] << 4) | (hex[2 * i + 1]);
		
	if (odd) {
		temp[count] = (hex[len - 1] << 4) | 0x0F;
		for (i = 0; i < (6 - (count + 1)); i++)
			temp[5 - i] = 0xFF;
    }
    else {
		for (i = 0; i < (6 - (count)); i++)
			temp[5 - i] = 0xFF;
    }
	memcpy(hex, temp, 6);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑先生Ethan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值