将char数组的“1,2,3,4,5,6,7,8”存储为0x12345678

int main(void)
{
    unsigned char addr_8[8] = {1, 2, 3, 4, 5, 6, 7, 8};
    unsigned int addr_32 = 0;
    addr_32 = get_addr_32(addr_8);
    printf("%#x",addr_32);
    addr_32 = get_addr_32_2(addr_8);
    printf("%#x",addr_32);
}

直接处理

unsigned int get_addr_32_2(unsigned char *addr_8)
{
    unsigned int addr_32_res = 0;
    int pow;
    for (int i = 7; i > -1; i--)/*7~0*/
    {
        if (i == 7)
            pow = 1;
        else
            pow = pow * 16; /*对于16进制数而言,每移动一位其乘方的基数*16*/
        addr_32_res += addr_8[i] * pow;
    }
    return addr_32_res;
}

数组反向后处理

unsigned int get_addr_32(unsigned char *addr_8)
{
    unsigned int addr_32_res = 0;

    unsigned char addr_8_reverse[8];
    memset(addr_8_reverse, 0, 8);
    for (int i = 0; i < 8; i++) /*原字符数组高位在前,反向后方便处理*/
    {
        addr_8_reverse[i] = addr_8[7 - i];
    }

    int pow;
    for (int i = 0; i < 8; i++)
    {
        if (i == 0)
            pow = 1;
        else
            pow = pow * 16; /*对于16进制数而言,每移动一位其乘方的基数*16*/
        addr_32_res += addr_8_reverse[i] * pow;
    }
    return addr_32_res;
}
posted @ 2023-02-02 16:55  中庭之园  阅读(42)  评论(0编辑  收藏  举报