本文描述:將兩個字節長度的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類型,斷開成了單字節!