将四字节hex形式IP转换成点分十进制式

1、需求描述

将四字节的hex形式IP如

x0AxA8x01xB5 转换成 点分十进制形式如

“10.168.1.181”

2、代码实现

//
// convert one byte hex to int str
// byte_hex: input byte hex
// outdata: output converted int data
// int_str_len: the length of the int str
//
void byte_hex2int_str(const u8 byte_hex, u8 *outdata, u8 *int_str_len)
{
    u8 i = 0, m = 0;
    u8 Adata, Bdata;
    u8 tmp_res[20] = {0};    
    
    Adata = byte_hex;
    while (1)
    {
        Bdata = (Adata % 10);
        Adata = (Adata / 10);
        tmp_res[i] = Bdata;
        i++;
        if (Adata == 0)
        {
            break;
        }
    }  
    *int_str_len = i;
    
    for (m = 0; m < i; m++)
    {
        *(outdata + m) = (tmp_res[i-1-m] + 0x30);     
    }
}

//
// function: convert ip hex to string
//
void ip_hex2str(u8 *out_ip_buf, const u8 * in_hex_buf)
{
    u8 int_str_len = 0x00;
    u8 i = 0x00;
    
    byte_hex2int_str(in_hex_buf[0], out_ip_buf+i, &int_str_len);
    i += int_str_len;
    out_ip_buf[i]='.';
    i++;
    
    byte_hex2int_str(in_hex_buf[1], out_ip_buf+i, &int_str_len);
    i += int_str_len;
    out_ip_buf[i]='.';
    i++;
    
    byte_hex2int_str(in_hex_buf[2], out_ip_buf+i, &int_str_len);
    i += int_str_len;
    out_ip_buf[i]='.';
    i++;
    
    byte_hex2int_str(in_hex_buf[3], out_ip_buf+i, &int_str_len);    
}
原文地址:https://www.cnblogs.com/aqing1987/p/4270511.html