short转换为char,提取单字节

本文描述:将两个字节长度的wdVersion,分别提取出低字节和高字节的值,此方法可以用于不同类型不同长度的单字节提取!

(注释种的位操作的方法也可以,先 移位  后  位与  操作)

wdVersion的类型为 unsigned short。2字节

取变量wdVersion(长度2字节)的第一个字节的值!
        第一步,取首地址          &wdVersion
        第二步,强制转换          (char*)&wdVersion  将2字节data变成1字节!!!
        第三步,取值                *((char*)&wdVersion)

  1. #include<WinSock2.h> //头文件,Windowssocket
  2. #pragma comment(lib,'ws2_32.lib')//加载库文件
  3. # include<stdio.h>
  4. int main(void)
  5. {
  6. WORD wdVersion = MAKEWORD(2, 1);//2.1 //typedef unsigned short WORD; 两个字节
  7. //WSAStartup(,);
  8. //取变量wdVersion(长度2字节)的第一个字节的值!
  9. //第一步,取首地址 &wdVersion
  10. //第二步,强制转换 (char*)&wdVersion 将2字节data变成1字节!!!
  11. //第三步,取值 *((char*)&wdVersion)
  12. int a = *((char*)&wdVersion); //取低字节:变成(char*)并取值
  13. int b = *((char*)&wdVersion+1);//取高字节:变成(char*)后+1,并取值
  14. int c = (char*)(&wdVersion);
  15. int d = (char*)(&wdVersion+1);
  16. int e = *(&wdVersion);//258,完整的short类型的值
  17. int f = *((char*)(&wdVersion) + 1);//同int b
  18. int g = *((char*)(&wdVersion + 1));-52,h的值取了第二个字节
  19. int h = *(&wdVersion + 1);//wdVersion首地址+2后的地址所存储的值,类型和值都未知
  20. /*
  21. //取字节的另一种方法:位操作!!!
  22. int c = (wdVersion>>8)&0xff;//取高字节
  23. int d = wdVersion & 0xff;//取低字节
  24. */
  25. printf('a=%d b=%d c=%d d=%d e=%d f=%d g=%d h=%d\n', a, b,c,d,e,f,g,h);
  26. system('pause');
  27. return 0;
  28. }

wdVersion=258= 0000 0001  0000 0010;高字节是1,低字节是2

十进制52428=》二进制1100 1100 1100 1100‬=》高字节1100 1100(此为补码)=》最高位代表负号 (-1得到反码)11001011=》(除符号位外各位取反)得到原码10110100=》去掉符号位得110100=52(绝对值)

验算:-52= (最高符号位)原码1011 0100 =(除符号位外各位取反)反码 1100 1011=(+1后得到)补码 11001100

结论:

1.  (char*)的意义在于,将原本两个字节的short类型,断开成了单字节!

(0)

相关推荐