short转换为char,提取单字节
本文描述:将两个字节长度的wdVersion,分别提取出低字节和高字节的值,此方法可以用于不同类型不同长度的单字节提取!
(注释种的位操作的方法也可以,先 移位 后 位与 操作)
wdVersion的类型为 unsigned short。2字节
取变量wdVersion(长度2字节)的第一个字节的值!
第一步,取首地址 &wdVersion
第二步,强制转换 (char*)&wdVersion 将2字节data变成1字节!!!
第三步,取值 *((char*)&wdVersion)
#include<WinSock2.h> //头文件,Windowssocket
#pragma comment(lib,'ws2_32.lib')//加载库文件
# include<stdio.h>
int main(void)
{
WORD wdVersion = MAKEWORD(2, 1);//2.1 //typedef unsigned short WORD; 两个字节
//WSAStartup(,);
//取变量wdVersion(长度2字节)的第一个字节的值!
//第一步,取首地址 &wdVersion
//第二步,强制转换 (char*)&wdVersion 将2字节data变成1字节!!!
//第三步,取值 *((char*)&wdVersion)
int a = *((char*)&wdVersion); //取低字节:变成(char*)并取值
int b = *((char*)&wdVersion+1);//取高字节:变成(char*)后+1,并取值
int c = (char*)(&wdVersion);
int d = (char*)(&wdVersion+1);
int e = *(&wdVersion);//258,完整的short类型的值
int f = *((char*)(&wdVersion) + 1);//同int b
int g = *((char*)(&wdVersion + 1));-52,h的值取了第二个字节
int h = *(&wdVersion + 1);//wdVersion首地址+2后的地址所存储的值,类型和值都未知
/*
//取字节的另一种方法:位操作!!!
int c = (wdVersion>>8)&0xff;//取高字节
int d = wdVersion & 0xff;//取低字节
*/
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);
system('pause');
return 0;
}
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)