日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux分析字节序的分类及特点,计算机中的字节序详解 分类: 【Linux/Windows操作系统】 2015-01-07 21:54 97人阅读 评论(0) 收藏...

發(fā)布時間:2025/3/19 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux分析字节序的分类及特点,计算机中的字节序详解 分类: 【Linux/Windows操作系统】 2015-01-07 21:54 97人阅读 评论(0) 收藏... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們都知道,內(nèi)存中存儲的是各種變量,各種奇葩東西,不用的變量占用不用的字長,例如在intel X86環(huán)境下,一個int占用兩個字

0

1

2

3

4

5

6

7

8

9

0x30

0x31

0x32

0x33

0x34

0x35

0x36

0x37

0x38

0x39

節(jié),即16位。然后在這16位上用0或1來表示這個int類型的變量到底是什么數(shù)值。那么這樣就有兩種寫法了,在這16位上是從左往右寫呢,還是從右往左寫呢。這就好比現(xiàn)代人寫字從左往右,古人寫字從右往左。根據(jù)這樣兩種不同的寫法,計算機中就產(chǎn)生了兩種模式:小端模式和大端模式。具體來看一個例子:

假設(shè)在intel X86環(huán)境下,有一個數(shù)字,是1539,用二進制就表示為:0000 0110 0000 0011(兩個字節(jié))

高八位

低八位

0000 0110

0000 0011

既然計算機以字節(jié)為單位,如果這里的一個字節(jié)相當于寫一個漢字的話,那這個1539在計算機內(nèi)部就相當于要寫兩個漢字。怎么寫呢,不著急,先介紹

小端模式:按照從低地址到高地址的順序,依次存放數(shù)據(jù)的低字節(jié)到高字節(jié)。

高八位

低八位

小端模式:

0000 0110

0000 0011

插入一句:一個數(shù)的原數(shù),是高字節(jié)在左,低字節(jié)在右,當然是這樣,因為左邊的權(quán)值高,2的次方高。學(xué)習(xí)本篇的時候,要始終記住吧一個個字節(jié)作為一個個單位,而不要著眼于位。

我這里高八位標在左邊,低八位標在右邊,很多地方低八位標左,高八位標右,這個其實是完全一樣的,怎么看得舒服就怎么寫。

按照定義,低地址放低字節(jié),高地址放高字節(jié),所以低八位放1539的低字節(jié),高八位放1539的高字節(jié)。

接下來是

大端模式:按照從低地址到高地址的順序,依次存放數(shù)據(jù)的高字節(jié)到低字節(jié)。

高八位

低八位

大端模式:

0000 0011

0000 0110

現(xiàn)在再回頭看看,不過就是正著寫反著寫而已。╮(╯_╰)╭

一般來說,x86 系列 CPU 都是小端模式的字節(jié)序,PowerPC 通常是大端模式字節(jié)序,還有的CPU能通過跳線來設(shè)置CPU工作于小端模式還是大端模式模式。基本上要考察都是intel x86 x64環(huán)境,都是小端模式,不會那么坑考冷門的大端模式。。

練習(xí):

0x1234abcd

低地址 ?? ? ? ? ? ? 高地址

小端模式:0xcd? 0xab? 0x34? 0x12

大端模式:0x12? 0x34? 0xab? 0xcd

寫出下列程序的執(zhí)行結(jié)果

#include

main()

{

char*sz="0123456789";

int*p=(int*)sz;

printf("%x\n",*++p);

}

答案是37363534

'0'

'1'

'2'

'3'

'4'

'5'

'6'

'7'

'8'

'9'

0x30

0x31

0x32

0x33

0x34

0x35

0x36

0x37

0x38

0x39

int *p = (int*)sz; 這句話的意思是說把這塊內(nèi)存當做int來對待。可以這樣理解,數(shù)據(jù)就在內(nèi)存中擺著,就看你當成什么來用了。

不管32位還是64位,int都占四個字節(jié),printf那邊有個++p,這個p是int型的指針,所以按照int的大小走四個字節(jié)

即現(xiàn)在p指向的是:

'0'

'1'

'2'

'3'

'4'

'5'

'6'

'7'

'8'

'9'

0x30

0x31

0x32

0x33

0x34

0x35

0x36

0x37

0x38

0x39

這塊內(nèi)存區(qū)域。還記得嗎,用的是小端模式,那這個int變量該怎么寫?

很明顯是:0x37363534(低地址存低字節(jié))

所以用%X輸出的話就看到了37363534這個結(jié)果了。

寫出下列程序執(zhí)行結(jié)果

inta=0x12345678;

char*p=(char*)(&a);

printf("%x\n",*(p+1));

答案是0x56

判斷計算機是大端還是小端:

inti=1; char*p=(char*)&i; if(*p==1) printf("小端模式"); else// (*p == 0) printf("大端模式");

總結(jié)

以上是生活随笔為你收集整理的linux分析字节序的分类及特点,计算机中的字节序详解 分类: 【Linux/Windows操作系统】 2015-01-07 21:54 97人阅读 评论(0) 收藏...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。