zoukankan      html  css  js  c++  java
  • 十六进制数反转

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

    待续……

     

  • 相关阅读:
    IPC框架分析 Binder,Service,Service manager
    Android语音系列:编译Speex框架
    Android核心分析(21)Android应用框架之Android Application
    支付宝 移动支付
    对象、视频、音频的传输RTMP协议研究
    ffmpeg 移植篇笔记
    iPhone UI 设计篇(一)
    Service深入分析
    CSS注意事项
    关于文本断行的样式
  • 原文地址:https://www.cnblogs.com/codeblock/p/4755068.html
Copyright © 2011-2022 走看看