C语言 字符串和十六进制数问题 高分!高分!!

来源:百度知道 编辑:UC知道 时间:2024/05/27 15:09:40
做手持机二次开发,通过按键在屏幕上输入字符串:12345678(可以随便输入)
如何将它转换为
unsigned char addr[4];
addr[0]=0x12;
addr[1]=0x34;
addr[2]=0x56;
addr[3]=0x78
也就是说输入的字符串要分割开来,变为几个16进制数,并存放在数组中,注意,字符串可以随便输入,但是都是数字。

用union可以帮你快速完成。

union tag_u
{
unsigned char addr[4];
} data;

把data当做一个元变量,存入数据后,读出addr[i]即可。

注意:CPU的大小端对此有影响!

小端cpu上的情况:
[20@~/c-cpp]$ cat a.c
#include <stdio.h>
int main()
{
union tag_u
{
unsigned char addr[4];
} data;

scanf("%x", &data);
printf("0x%x,0x%x,0x%x,0x%x\n",
data.addr[0],data.addr[1],data.addr[2],data.addr[3]);
return 0;
}

[21@~/c-cpp]$ gcc a.c
a.c: 在函数‘main’中:
a.c:9: 警告: 格式‘%x’需要类型‘unsigned int *’,但实参 2 的类型为‘union tag_u *’
[22@~/c-cpp]$ ./a.out
12345678
0x78,0x56,0x34,0x12
[23@~/c-cpp]$

scanf("%2x%2x%2x%2x",&addr[0],&addr[1],&addr[2],&addr[3]);

1|(2<<4)