【一雪前耻!】两种方法判断大小端模式
廢話不多說,直接上代碼。
法一:指針法?
#include <stdio.h>int main(){int a = 1;char p = *((char *) &a); ///< int數據指針地址賦值給char類型數據后解引用if(((int)p) == 1) //把char類型數據強轉成int類型數據{printf("little-endian\n");}else{printf("big-endian\n");}return 0; }?法二:聯合體法?
#include <stdio.h>int main(){union Data {int i;char ch;} un;un.i = 1;if(((int)(un.ch)) == 1){printf("little-endian\n");}else{printf("big-endian\n");}return 0; }簡單聊聊。
為啥叫一雪前恥呢。說來話長了哎。仍記得當初面試GE醫療,讓我手擼一個判斷大小端的代碼,當場懵逼時候的情景。老實說,一直都記不清大端小端,作為API調用者,大小端的理論也沒深入理解過,所以想想寫不出來也是早就注定的結局。現如今,痛定思痛,痛改前非。待從頭,收拾舊山河,朝天闕。
說下我理解與記憶的方法吧:
數據的低位在內存的低地址就為小端模式,否則就是大端模式。
詳細說說?。
大端模式,是指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址中,這樣的存儲模式有點兒類似于把數據當作字符串順序處理:地址由小向大增加,而數據從高位往低位放;這和我們的閱讀習慣一致。
小端模式,是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低。
下面以unsigned int value = 0x12345678為例,分別看看在兩種字節序下其存儲情況,我們可以用unsigned char buf[4]來表示value
| buffer | 內存地址 | 小端模式(little-endian)存放內容 | 大端模式(big-endian)存放內容 |
| buffer[0] | 0x4000 | 0x78 | 0x12 |
| buffer[1] | 0x4001 | 0x56 | 0x34 |
| buffer[2] | 0x4002 | 0x34 | 0x56 |
| buffer[3] | 0x4003 | 0x12 | 0x78 |
參考文檔:https://baike.baidu.com/item/%E5%A4%A7%E5%B0%8F%E7%AB%AF%E6%A8%A1%E5%BC%8F/6750542?fr=aladdin
總結
以上是生活随笔為你收集整理的【一雪前耻!】两种方法判断大小端模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 了解招聘中的这些潜台词,找工作少走弯路
- 下一篇: 物联网生态品牌白皮书