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類型,斷開成了單字節!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章