编码格式
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);
}