MAC位址在18位元組及6位元組之間的轉換

2021-06-26 09:16:52 字數 1077 閱讀 3699

mac進行位元組轉換

#define unsigned int u32

#define macstr "%02x:%02x:%02x:%02x:%02x:%02x"

#define macstol(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]

#define macltos(a) (u32 *)&(a)[0], (u32 *)&(a)[1], (u32 *)&(a)[2], (u32 *)&(a)[3], (u32 *)&(a)[4], (u32 *)&(a)[5]

int main(int argc,char argv)

; u8 mac_add_test[18] = ;

/*用sscanf將18位元組轉為6位元組,有的編譯器可以不用(u32 *)進行強轉*/

sscanf(mac_add, macstr, macltos(mac_add_tmp));

/*6位元組轉為18位元組*/

snprintf(mac_add_test, 18, macstr, macstol(mac_add));

printf("original : %s new : %s\n", mac_add, mac_add_test);

return 0;

}

感覺這樣還是有些問題:

6位元組為 u8型別,進行強轉之後記憶體會有變化,可能結果正確但是相同的 18位元組mac轉換完成之後用memcmp比較會提示不同;

然後我用搞了下面這個方法;

#define macltos(a)  &(a)[0],&(a)[1], &(a)[2],&(a)[3],&(a)[4], &(a)[5]

static void mac_to_net(u32* a, u8* b)}

u32 mac_add_tmp_b[6] = ;

sscanf(mac_add, macstr, macltos(mac_add_tmp_b)); //先轉為u32

mac_to_net(mac_add_tmp_b,mac_add_tmp);

位元,位元組,千位元組

如果你被人問到什麼是位元?什麼是位元組?這些網路中資料傳輸的單位一定會讓你有點毫無頭緒的感覺。沒關係,這些都很好理解,看過了下面的內容你就可以有條有理的把問題一一解答了。首先說說最小的單位,我們通常都叫做bit,也就是位元,有的時候也稱為位。但不管怎麼稱呼,他們都是二進位制數中最小的單位。單位的概念...

位元組對齊 8位元組對齊

參考博文 參考1 參考2 參考3 在記憶體管理中經常使用位元組對齊來管理分配的記憶體。1 原理 2 演算法 2.1unsigned intcalc align unsigned int n,unsigned align 2.2 更好的演算法 unsigned intcalc align unsign...

2012 09 12 位元組轉換

位 位元 bit 這是記憶體中最小的單位,二進位制數序列中的乙個0或乙個1就是一比位元,在電腦中,乙個位元對應著乙個電晶體。位元組 b byte 是計算機中最常用 最基本的存在單位。乙個位元組等於8個位元,即1 byte 8bit。千位元組 kb kilo byte 電腦的記憶體容量都很大,一般都是...