• 十六进制数反转


    实现一个字节反转函数
    要求如下:
    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这个方发判断,感觉太麻烦,谁有好的思路,告诉俺一下。谢谢!

    待续……

     

  • 相关阅读:
    浅谈Android中Activity的生命周期
    探索ASP.NET MVC框架之控制器的查找与激活机制
    探索ASP.NET MVC框架之路由系统
    浅谈JavaScript中的defer,async
    浅谈MVC中路由
    JavaScript中一些怪异用法的理解
    split
    您正在搜索的页面可能已经删除、更名或暂时不可用。
    C#中的Attributes的用法
    Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
  • 原文地址:https://www.cnblogs.com/codeblock/p/4755068.html
Copyright © 2020-2023  润新知