当前位置:   article > 正文

对于uint32_t,uint16_t和uint8_t之间的相互转化,以及uint16_t的高低位互换,bit->int转换_uint8_t 转uint32_t

uint8_t 转uint32_t

一.对于uint32_t,uint16_t和uint8_t之间的相互转化,以及uint16_t的高低位互换,bit->int转换等

  1. 左移:从二进制的角度看现象,就是左移几位就在右边添几个0
  2. 从逻辑上来讲左移n位就是乘以2的n次方了。
  3. 右移:从二进制角度看,则是在左边填0,右边去除移动的位数的位 。
  4. (如遇到时1>>1, 便是0.);
  5. (注意:如果操作数是一个正数,那么左边的空缺位使用0补,
  6. 如果操作数是一个负数,那么左边的空缺位使用1补)
  7. 从逻辑上来讲右移就是除以2的n次方;
  1. 将某位置0 a&=~(1<<x);
  2. 将某位置1 a|=(1<<x);
  3. 取反某位 a^=(1<<x)
  4. 向某地址写入 *(*int ) a=0x12302312;
  1. #include <stdio.h>
  2. #define u8 short int //2字节 8位
  3. #define u16 long int //4字节 16位
  4. #define u32 long long //8字节 32位
  5. int main()
  6. {//1. 从u8 -->>>u16的转化
  7. u8 a[2] = { 0xcd, 0xe2 };
  8. u16 b;
  9. //分析:
  10. b=a[0]; //得到高位
  11. b=b<<8;//向左移8位。结果:0xcd00
  12. b=b|a[1];//或上a[1]=0xe2; 即0xcde2
  13. //打印结果:a[1]=0xe2 a[0]0xcd
  14. // b=0xcde2
  15. // 2. 从u16 -->>>u8的转化
  16. u8 a[2] = { 0 };
  17. u16 b = 0xc32d;
  18. //分析:
  19. a[1] = b >> 8;//b向右移8位,0x3c;
  20. a[0] = b & 0xff;//b与上oxff,得到0x2d
  21. //打印结果:a[1]=0xc3 a[0]= 0x2d
  22. // b=0xc32d
  23. // 3.调换高低位的位置 需要先将u16--->>u8 ,调换后,u8--->16
  24. u8 a[2] = { 0xab, 0xcd };
  25. u16 b;
  26. b= a[0] | a[1] << 8;//a[1]左移8位0xcd00,再或上a[0]0x00ab(为方便理解)这样看;
  27. //结果:
  28. //a[1]=0xcd a[0]=0xab
  29. //b=0xcdab
  30. // 4. 从u32 -->>>u8的转化
  31. int i = 4;
  32. u32 a=0x1234abcd;
  33. u8 b[4];
  34. b[0] = a >> 24;
  35. b[1] = (a >> 16)&0xff;
  36. b[2] =( a >> 8)&0xff;
  37. b[3] = a &0xff ;
  38. while (i--)
  39. {
  40. printf("0x%02x\n", b[i]);
  41. }
  42. //5. 从u8 -->>>u32的转化
  43. int i = 4; //8-->32
  44. u32 a;
  45. u8 b[4] = {0xcf,0xb3,0x43,0xbb};
  46. //此顺序不能改
  47. a = (long long)b[3] << 32;//高位
  48. a = b[0] << 24|b[3];//最低位
  49. a =a|(( b[1]&0x00ff)<<16);//低位
  50. a = a | ((b[2] & 0x0000ff) <<8);//次高位
  51. printf("0x%02x\n", a);
  52. // 6.从u32 -->>>u16的转化
  53. int i = 2;
  54. u32 a = 0x1234abcd;
  55. u16 b[2];
  56. b[0] =( a >>16);
  57. b[1] = a &0xffff;
  58. while (i--)
  59. {
  60. printf("0x%02x\n", b[i]);
  61. }
  62. //7. 从u16 -->>>u32的转化
  63. int i = 2;
  64. u32 a ;
  65. u16 b[2] = {0xa1cb,0x2bea};
  66. a=b[0]<<16;
  67. a = b[1] |( b[0]<<16);
  68. printf("0x%02x\n", a);
  69. getchar();
  70. }
  71. //8.int --->>bit(二进制)的转化
  72. int int2_bit(int a)
  73. {
  74. int i,bit,size=sizeof(a)*8;
  75. for(i=0;i<size;i++)
  76. {
  77. bit=a&(1<<(size-i-1));
  78. if(bit==1)
  79. pirntf("1");
  80. else
  81. printf("0");
  82. if(i%4==3)
  83. printf(" ");
  84. }
  85. }
  86. //9.bit-->int的转化
  87. int power(int x)//x的指数幂
  88. {
  89. int i=1,t=2;
  90. if(x ==0)
  91. t=1;
  92. for(;i<x;i++)
  93. {
  94. t=2*t;
  95. }
  96. return t;
  97. }
  98. int bit_int(char *x)
  99. { int i=0,n=7,tmp,sum;
  100. for(;i<8;i++,n--)
  101. {
  102. tmp=x[i]*pwer(n);
  103. sum+=tmp;
  104. }
  105. return sum;
  106. }
  107. //记录一个整数的二进制有多少个1
  108. int ch_sum(int x)
  109. {
  110. int tmp,is=0;
  111. for(int i=0;i<sizeof(x)*8;i++)
  112. {
  113. tmp=1<<i;
  114. if(x&tmp)
  115. {
  116. is++;
  117. }
  118. }
  119. return is;
  120. }
  121. //取补码
  122. int8_t otcp( uint8_t a)
  123. {
  124. uint8_t b=~a,t=1<<7;
  125. if(a<0)
  126. {
  127. b|=t;
  128. }
  129. return b;
  130. }
  131. //将u8转成16进制类行改
  132. u8 a[2] = { 0x6, 0xc };
  133. u16 b;
  134. //分析:
  135. b=a[0]; //得到高位
  136. b=b<<8;//向左移8位。结果:0x600
  137. b=b|(a[1]<<4);//左移4 ,得到到0xc60
  138. b=b>>4;//去除0 得到到0xc6
  139. printf("0x%0x ",b);
  140. //剔除空格数据间的空格符
  141. u8 d_k(u8 *databuf)
  142. { int of=0;
  143. for(int i=0;i<sizeof(datebuf);i++)
  144. {
  145. char c=databuf[i];
  146. if(c==' ')
  147. {
  148. ++of;
  149. }
  150. else
  151. {
  152. rxbuf[i-of]=c;
  153. }
  154. }
  155. return rxbuf;
  156. }
  157. //ascii码转16进制
  158. char c_buf='a';
  159. int b='a'-'0' ;
  160. printf("0x%0x",b);//hex 输出
  161. printf("\n%d",b);//十进制 输出
  162. printf("\n%d",c_buf);//字符 以十进制 输出

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/280969
推荐阅读
相关标签
  

闽ICP备14008679号