将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;
}