mac_05185 2022-05-14 16:18 采纳率: 67.1%
浏览 150
已结题

C语言如何把该16进制字符转换为ip地址?

img


我需要把第二个红框内容转换为IP地址,都是string类型,末尾的3B代表着;
能否给予代码参考?感谢

  • 写回答

6条回答 默认 最新

  • zhangsz_sh 2022-05-14 18:10
    关注
    #include <stdio.h>
    #include <string.h>
    
    /* "AB" -> 0xAB */
    int char_to_byte(const char *str_char, unsigned char *str_byte)
    {
        unsigned char byte_high = 0x00;
        unsigned char byte_low = 0x00;
        byte_high = *str_char;
        byte_low = *(str_char + 1);
    
        if ((str_char == NULL) || (str_byte == NULL))
            return -1;
    
        /* byte High */
        if ((byte_high >= '0') && (byte_high <= '9'))
        {
            byte_high = byte_high - '0';
        }
        else if ((byte_high >= 'a') && (byte_high <= 'f'))
        {
            byte_high = byte_high - 'a' + 0x0a;
        }
        else if ((byte_high >= 'A') && (byte_high <= 'F'))
        {
            byte_high = byte_high - 'A' + 0x0a;
        }
        else
        {
            return -1;
        }
    
        /* byte Low */
        if ((byte_low >= '0') && (byte_low <= '9'))
        {
            byte_low = byte_low - '0';
        }
        else if ((byte_low >= 'a') && (byte_low <= 'f'))
        {
            byte_low = byte_low - 'a' + 0x0a;
        }
        else if ((byte_low >= 'A') && (byte_low <= 'F'))
        {
            byte_low = byte_low - 'A' + 0x0a;
        }
        else
        {
            return -1;
        }
    
        *str_byte = (byte_high << 4) + byte_low;
        return 0;
    }
    
    /* "ABCD..." -> [0xAB, 0xCD, ...] */
    int hex_str_convert(const char *str_in, char *str_out)
    {
        int i = 0;
        unsigned char tmp = 0;
        size_t len = strlen(str_in);
    
        for (i = 0; i < len / 2; i++)
        {
            if (char_to_byte(&str_in[i * 2], &tmp) == 0x00)
                *(str_out + i) = tmp;
            else
                return -1;
        }
    
        return 0;
    }
    
    int main()
    {
        char str_out[64] = { 0 };
        const char *str_in = "3131372E37342E3133362E33343B";
    
        hex_str_convert(str_in, str_out);
        printf(str_out);
    
        return 0;
    }
    
    • 运行输出: 117.74.136.34;
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令