实现一个字节反转函数
要求如下:
1,把输入的任意数字按16进制表示,并把高八位和低八位互换:ex:1234->0x3412
2,把一个16位的整数按比特位呼唤,第15位和第0位互换,第14位和第二位互换,以此类推,ex:0x0001->0x8000
3,输入非16进制数字提示错误,输入0退出程序
效果如下图:
1 #include <stdio.h>
2 int reverse(int data);
3 int exchange(int data);
4 int main(int argc,char *argv[])
5 {
6 int data;
7 /*
8 此处while循环需要特别注意,在c语言中为初始化的整形变量只有在为静态变量和全局变量的时候会默认值为0,
9 作为局部变量的时候其值是随机的,当然随机值也有可能是0,为了保险起见,data的判断放到了scanf后面,
10 也就是data所判断的值即为scanf所输入的值!
11
12 */
13 while(printf("Please input 1~4 HEX integers:
")&&scanf("%x",&data)&&data)
14 {
15 printf("input value =0x%04x
exchange result = 0x%04x, reverse order result = 0x%04x
",data,exchange(data),reverse(data));
16
17 }
18 return 0;
19 }
20 int exchange(int data)
21 {
22 int data_low;
23 int data_high;
24 data_low=(data&0xff00)>>8;
25 data_high=(data&0x00ff)<<8;
26 int exchange_data=data_high+data_low;
27 return exchange_data;
28 }
29 int reverse(int data)
30 {
31 int data_reverse=0x0000;
32 int i=16;
33 while(i--)
34 {
35 data_reverse=data_reverse+((data&0x0001)<<i);
36 data=data>>1;
37 }
38 //此处输出格式是0x%04x保证高位0的输出,而使用%#x则达不到应有的效果。
39 return data_reverse;
40 }
此处判断是否为十六进制数字,暂时没有特别好的方法,不太想用isxdigit这个方发判断,感觉太麻烦,谁有好的思路,告诉俺一下。谢谢!
待续……