<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近在看 redis 的記憶體編碼,裡面涉及到位元組序相關的內容。這裡就當複習一下,做個簡單的回顧。
資料儲存在記憶體中,是以位元組為單位的,如果是單位元組資料(如char、unsigned char、int8)就不會有位元組序的問題。但是多位元組資料(如 int、float、double)就要考慮位元組序的問題了。位元組序共分為兩種:大端序 和 小端序。
資料的高位位元組儲存在地址的低端;低位位元組儲存在地址的高階。如圖所示,值為 0x12345678 的四位元組整數在大端序的主機上的記憶體排布。
資料的高位位元組儲存在地址的高階;低位位元組儲存在地址的低端。如圖所示,值為 0x12345678 的四位元組整數在小端序的主機上的記憶體排布。
除了主機位元組序,還有網路位元組序。主機位元組序由CPU決定,Intel Core 經測試都是小端位元組序。而網路位元組序採用的是大端序。測試位元組序可以通過一段 C 的原始碼搞定。
#include <stdio.h> int main(int argc, char *argv[]) { int i; int x = 0x12345678; for (i = 0; i < sizeof(int); ++i) { unsigned char *p = ((unsigned char *)(&x)) + i; unsigned char v = *p; printf("%p 0x%d%dn", p, v>>4, v & 0xf ); } return 0; }
取得整數 x 的首地址轉換成 unsigned char* 指標後再向前偏移 i 個單位,分別得到這 sizeof(int) 個位元組的地址,然後用 * 取得每個地址上的值,通過位運算轉換成 16進位制 輸出。
Linux 系統可以通過指令獲取 CPU 的型別:
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 4 Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz
大端序和小端序的互相轉換,其實就是記憶體翻轉,在知道一個整數或者一個指標的位元組數的時候,就是做一個映象的交換。這裡以 64位元 整型為例:
void memrev64(void *p) { unsigned char *x = p, t; t = x[0]; x[0] = x[7]; x[7] = t; t = x[1]; x[1] = x[6]; x[6] = t; t = x[2]; x[2] = x[5]; x[5] = t; t = x[3]; x[3] = x[4]; x[4] = t; } uint64_t intrev64(uint64_t v) { memrev64(&v); return v; }
64位元整數的位元組數為8,所以在位元組序進行轉換的時候:
第0個位元組和第7個位元組交換;
第1個位元組和第6個位元組交換;
第2個位元組和第5個位元組交換;
第3個位元組和第4個位元組交換;
對於 32位元整數、16位元整數的情況,就更加簡單了,不再累述。
到此這篇關於C/C++位元組序的深入理解的文章就介紹到這了,更多相關C語言 位元組序內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45