程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言之linux內核實現位數高低位互換

C語言之linux內核實現位數高低位互換

編輯:關於C

linux內核實在是博大精深,有很多優秀的算法,我之前在工作中就遇到過位數高低位交換的問題,那時候對於C語言還不是很熟練,想了很久才寫出來。最近在看內核的時候看到有內核的工程師實現了這樣的算法,和我之前想的一樣,那麼今天就把它分享出來吧。

在開發需求中,有要實現32位、16位、8位數高低位交換的算法。那麼我們具體看看代碼實現:

還是一樣,從linux內核中將代碼摳出來:

#include 

//將一個8位數高低4位交換 
static inline unsigned char bswap_8(unsigned char v)
{	
	return ((v & 0xff) << 4) | (v >> 4) ;   //將參數(v & 0xff) << 4 相當於放到高位, v >> 4 位相當於放在低位
}                                               //以下兩個代碼分析雷同
//將一個16位數高低8位交換 
static inline unsigned short bswap_16(unsigned short v)
{
	return ((v & 0xff) << 8) | (v >> 8);
}
//將一個32位數高低16位交換 
static inline unsigned int bswap_32(unsigned int v)
{
	return ((v & 0xff) << 24) | ((v & 0xff00) << 8) |
		((v & 0xff0000) >> 8) | (v >> 24);
}
int main(void)
{

	unsigned short v = 0x1000 ;
	printf("1、\n原來的v:%d\n",v);
	printf("16位數高低8位轉化後的v:%d(0x%x)=========>0x%x--->%d\n",v,v ,bswap_16(v),bswap_16(v)) ;
	unsigned char  a = 0x0a  ;
	printf("\n2、\n原來的a:%d\n",a);
	printf("8位數高低4位轉化後的a:%d(0x%x)==========>0x%x--->%d\n",a,a ,bswap_8(a),bswap_8(a)) ;	
	unsigned int  b = 0x00001111; 
	printf("\n3、\n原來的b:%d\n",b);
	printf("32位數高低16位轉化後的b:%d(0x%x)========>0x%x--->%d\n",b,b ,bswap_32(b),bswap_32(b)) ;
	return 0 ;
}
運行結果:

 

從運行結果看,三個接口分別實現了數據高低位的交換,驗證成功!大笑

\
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved