C++ 十六进制字符串和字符数组相互转换

本文详细介绍了如何将16进制字符串转换为字节数组,以及反之的转换方法。提供了两种不同的字节数组转16进制字符串的实现,适合用于数据解析和编码场景。

字符串转byte数组,就是实现如下功能:把一个字符串,比如“E4F1C3A81F”每两位作为一个十六进制数存到一个unsigned char 型的数组(buf)里,buf[0] = 0xE4,buf[1] = 0xF1,buf[2] = 0xC3,buf[3] = 0xA8......。我们知道字符串中的字符在计算机中大小是其ASCII码值,比如E的ASCII值是69,但是E如果作为一个十六进制数,在计算机中的大小是14,所以我们需要找到一种对应关系将字母E(69)->14,同样将第二位的数字字符4(ASCII:52)->4,并将转换后的14放到高4位,4放到低4位即可。

 

16进制字符串转字节数组

int hex2bytearray(char s[],unsigned char bits[])

{
    int i,n = 0;
    for(i = 0; s[i]; i += 2) {
        if(s[i] >= 'a' && s[i] <= 'f')
            bits[n] = s[i] - 'a' + 10;
        else bits[n] = s[i] - '0';
        if(s[i + 1] >= 'a' && s[i + 1] <= 'f')
            bits[n] = (bits[n] << 4) | (s[i + 1] - 'a' + 10);
        else bits[n] = (bits[n] << 4) | (s[i + 1] - '0');
        ++n;
    }
    return n;
}

 

字节数组转16进制字符串方法1

string bytearray2hex(unsigned char byte_arr[],int arr_len)
{
    string hexstr="";
    for (int i=0;i<arr_len;i++)
    {
        char hex1;
        char hex2;
        int value=byte_arr[i];
        int v1=value/16;
        int v2=value % 16;

        if (v1>=0&&v1<=9)
            hex1=(char)(48+v1);
        else
            hex1=(char)(55+v1);

        if (v2>=0&&v2<=9)
            hex2=(char)(48+v2);
        else
            hex2=(char)(55+v2);
        
        if (hex1>='A'&&hex1<='F')
            hex1+=32;

        if (hex2>='A'&&hex2<='F')
            hex2+=32;

        hexstr=hexstr+hex1+hex2;
    }
    return hexstr;
}

 

字节数组转16进制字符串方法2

char hb2hex(unsigned char hb)

{
    hb = hb & 0xF;
    return hb < 10 ? '0' + hb : hb - 10 + 'a';
}

string bytearray2hex(unsigned char byte_arr[],int arr_len)
{
    string res;
    for(size_t i = 0; i < arr_len; ++ i) {
        res.push_back(hb2hex(byte_arr[i] >> 4));
        res.push_back(hb2hex(byte_arr[i]));
    }
    return res;
}

 

int main()
{
    char in[33] = "7bf94fef092a47109c518995ef88c4b2";
    unsigned char out[128]={0};
    hex2bytearray(in, out);
    int len = strlen((const char*)out);
    for(int i=0; i<len; i++)
        cout << out[i];

    printf("\r\n");

    string ppp = bytearray2hex(out,16);
    cout << ppp.c_str();

    system("pause");
    return 0;
}

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值