詳解大端模式和小端模式

詳解大端模式和小端模式

嵌入式開發(fā)交流群280352802滞欠,歡迎加入燥滑!

一、大端模式和小端模式的起源

? ? ? ? 關(guān)于大端小端名詞的由來香罐,有一個(gè)有趣的故事卧波,來自于Jonathan Swift的《格利佛游記》:Lilliput和Blefuscu這兩個(gè)強(qiáng)國在過去的36個(gè)月中一直在苦戰(zhàn)。戰(zhàn)爭(zhēng)的原因:大家都知道庇茫,吃雞蛋的時(shí)候港粱,原始的方法是打破雞蛋較大的一端,可以那時(shí)的皇帝的祖父由于小時(shí)侯吃雞蛋旦签,按這種方法把手指弄破了查坪,因此他的父親锈颗,就下令,命令所有的子民吃雞蛋的時(shí)候咪惠,必須先打破雞蛋較小的一端,違令者重罰淋淀。然后老百姓對(duì)此法令極為反感遥昧,期間發(fā)生了多次叛亂,其中一個(gè)皇帝因此送命朵纷,另一個(gè)丟了王位炭臭,產(chǎn)生叛亂的原因就是另一個(gè)國家Blefuscu的國王大臣煽動(dòng)起來的,叛亂平息后袍辞,就逃到這個(gè)帝國避難鞋仍。據(jù)估計(jì),先后幾次有11000余人情愿死也不肯去打破雞蛋較小的端吃雞蛋搅吁。這個(gè)其實(shí)諷刺當(dāng)時(shí)英國和法國之間持續(xù)的沖突威创。Danny Cohen一位網(wǎng)絡(luò)協(xié)議的開創(chuàng)者,第一次使用這兩個(gè)術(shù)語指代字節(jié)順序谎懦,后來就被大家廣泛接受肚豺。


二、什么是大端和小端

? ? ? ? Big-Endian和Little-Endian的定義如下:

1) Little-Endian就是低位字節(jié)排放在內(nèi)存的低地址端界拦,高位字節(jié)排放在內(nèi)存的高地址端吸申。

2) Big-Endian就是高位字節(jié)排放在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端享甸。

舉一個(gè)例子截碴,比如數(shù)字0x12 34 56 78在內(nèi)存中的表示形式為:

1)大端模式:

低地址 -----------------> 高地址

0x12 ?| ?0x34 ?| ?0x56 ?| ?0x78

2)小端模式:

低地址 ------------------> 高地址

0x78 ?| ?0x56 ?| ?0x34 ?| ?0x12

可見,大端模式和字符串的存儲(chǔ)模式類似蛉威。

3)下面是兩個(gè)具體例子:

16bit寬的數(shù)0x1234在Little-endian模式(以及Big-endian模式)CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開始存放)為:

內(nèi)存地址 小端模式存放內(nèi)容 大端模式存放內(nèi)容

0x4000 0x34 0x12

0x4001 0x12 0x34

32bit寬的數(shù)0x12345678在Little-endian模式以及Big-endian模式)CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開始存放)為:

內(nèi)存地址 小端模式存放內(nèi)容 大端模式存放內(nèi)容

0x4000 0x78 0x12

0x4001 0x56 0x34

0x4002 0x34 0x56

0x4003 0x12 0x78

?4)大端小端沒有誰優(yōu)誰劣日丹,各自優(yōu)勢(shì)便是對(duì)方劣勢(shì):

小端模式 :強(qiáng)制轉(zhuǎn)換數(shù)據(jù)不需要調(diào)整字節(jié)內(nèi)容,1蚯嫌、2聚凹、4字節(jié)的存儲(chǔ)方式一樣。

大端模式 :符號(hào)位的判定固定為第一個(gè)字節(jié)齐帚,容易判斷正負(fù)妒牙。

三、數(shù)組在大端小端情況下的存儲(chǔ):

  以u(píng)nsigned int value = 0x12345678為例对妄,分別看看在兩種字節(jié)序下其存儲(chǔ)情況湘今,我們可以用unsigned char buf[4]來表示value:

  Big-Endian: 低地址存放高位,如下:

高地址

? ? ? ? ---------------

? ? ? ? buf[3] (0x78) -- 低位

? ? ? ? buf[2] (0x56)

? ? ? ? buf[1] (0x34)

? ? ? ? buf[0] (0x12) -- 高位

? ? ? ? ---------------

? ? ? ? 低地址

Little-Endian: 低地址存放低位剪菱,如下:

高地址

? ? ? ? ---------------

? ? ? ? buf[3] (0x12) -- 高位

? ? ? ? buf[2] (0x34)

? ? ? ? buf[1] (0x56)

? ? ? ? buf[0] (0x78) -- 低位

? ? ? ? --------------

低地址

四摩瞎、為什么會(huì)有大小端模式之分呢拴签?

? ? ? 這是因?yàn)樵谟?jì)算機(jī)系統(tǒng)中,我們是以字節(jié)為單位的旗们,每個(gè)地址單元都對(duì)應(yīng)著一個(gè)字節(jié)蚓哩,一個(gè)字節(jié)為8bit。但是在C語言中除了8bit的char之外上渴,還有16bit的short型岸梨,32bit的long型(要看具體的編譯器),另外稠氮,對(duì)于位數(shù)大于8位的處理器曹阔,例如16位或者32位的處理器,由于寄存器寬度大于一個(gè)字節(jié)隔披,那么必然存在著一個(gè)如果將多個(gè)字節(jié)安排的問題赃份。因此就導(dǎo)致了大端存儲(chǔ)模式和小端存儲(chǔ)模式。例如一個(gè)16bit的short型x奢米,在內(nèi)存中的地址為0x0010抓韩,x的值為0x1122,那么0x11為高字節(jié)鬓长,0x22為低字節(jié)园蝠。對(duì)于大端模式,就將0x11放在低地址中痢士,即0x0010中彪薛,0x22放在高地址中,即0x0011中怠蹂。小端模式善延,剛好相反。我們常用的X86結(jié)構(gòu)是小端模式城侧,而KEIL C51則為大端模式易遣。很多的ARM,DSP都為小端模式嫌佑。有些ARM處理器還可以由硬件來選擇是大端模式還是小端模式豆茫。


五、如何判斷機(jī)器的字節(jié)序

可以編寫一個(gè)小的測(cè)試程序來判斷機(jī)器的字節(jié)序:

BOOL IsBigEndian()

{

int a = 0x1234;

char b =? *(char *)&a;? //通過將int強(qiáng)制類型轉(zhuǎn)換成char單字節(jié)屋摇,通過判斷起始存儲(chǔ)位置揩魂。即等于 取b等于a的低地址部分

if( b == 0x12)

{

return TRUE;

}

return FALSE;

}?

聯(lián)合體union的存放順序是所有成員都從低地址開始存放,利用該特性可以輕松地獲得了CPU對(duì)內(nèi)存采用Little-endian還是Big-endian模式讀寫:

BOOL IsBigEndian()

{

union NUM

{

int a;

char b;

}num;

num.a = 0x1234;

if( num.b == 0x12 )

{

return TRUE;

}

return FALSE;

}?

六炮温、常見的字節(jié)序

一般操作系統(tǒng)都是小端火脉,而通訊協(xié)議是大端的。

4.1 常見CPU的字節(jié)序

Big Endian : PowerPC、IBM倦挂、Sun

Little Endian : x86畸颅、DEC

ARM既可以工作在大端模式,也可以工作在小端模式方援。


4.2 常見文件的字節(jié)序

Adobe PS – Big Endian

BMP – Little Endian

DXF(AutoCAD) – Variable

GIF – Little Endian

JPEG – Big Endian

MacPaint – Big Endian

RTF – Little Endian


另外没炒,Java和所有的網(wǎng)絡(luò)通訊協(xié)議都是使用Big-Endian的編碼。


七犯戏、如何進(jìn)行轉(zhuǎn)換

對(duì)于字?jǐn)?shù)據(jù)(16位):

#define BigtoLittle16(A)? (( ((uint16)(A) & 0xff00) >> 8)? ? | \

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (( (uint16)(A) & 0x00ff) << 8))

對(duì)于雙字?jǐn)?shù)據(jù)(32位):

#define BigtoLittle32(A)? ((( (uint32)(A) & 0xff000000) >> 24) | \

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (( (uint32)(A) & 0x00ff0000) >> 8)? | \

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (( (uint32)(A) & 0x0000ff00) << 8)? | \

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (( (uint32)(A) & 0x000000ff) << 24))

八送火、從軟件的角度理解端模式

? ? ? ? 從軟件的角度上,不同端模式的處理器進(jìn)行數(shù)據(jù)傳遞時(shí)必須要考慮端模式的不同笛丙。如進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)傳遞時(shí),必須要考慮端模式的轉(zhuǎn)換假颇。在Socket接口編程中胚鸯,以下幾個(gè)函數(shù)用于大小端字節(jié)序的轉(zhuǎn)換。

#define ntohs(n)? ? //16位數(shù)據(jù)類型網(wǎng)絡(luò)字節(jié)順序到主機(jī)字節(jié)順序的轉(zhuǎn)換

#define htons(n)? ? //16位數(shù)據(jù)類型主機(jī)字節(jié)順序到網(wǎng)絡(luò)字節(jié)順序的轉(zhuǎn)換

#define ntohl(n)? ? ? //32位數(shù)據(jù)類型網(wǎng)絡(luò)字節(jié)順序到主機(jī)字節(jié)順序的轉(zhuǎn)換

#define htonl(n)? ? ? //32位數(shù)據(jù)類型主機(jī)字節(jié)順序到網(wǎng)絡(luò)字節(jié)順序的轉(zhuǎn)換

其中互聯(lián)網(wǎng)使用的網(wǎng)絡(luò)字節(jié)順序采用大端模式進(jìn)行編址笨鸡,而主機(jī)字節(jié)順序根據(jù)處理器的不同而不同姜钳,如PowerPC處理器使用大端模式,而Pentuim處理器使用小端模式形耗。

? ? ? ?大端模式處理器的字節(jié)序到網(wǎng)絡(luò)字節(jié)序不需要轉(zhuǎn)換哥桥,此時(shí)ntohs(n)=n,ntohl = n激涤;而小端模式處理器的字節(jié)序到網(wǎng)絡(luò)字節(jié)必須要進(jìn)行轉(zhuǎn)換拟糕,此時(shí)ntohs(n) = __swab16(n),ntohl = __swab32(n)倦踢。__swab16與__swab32函數(shù)定義如下所示送滞。

#define ___swab16(x)

{

? ? ? ? ? ? __u16 __x = (x);

? ? ? ? ? ? ((__u16)(

? ? ? ? ? ? ? ? ? ? ? ? (((__u16)(__x) & (__u16)0x00ffU) << 8) |

? ? ? ? ? ? ? ? ? ? ? ? (((__u16)(__x) & (__u16)0xff00U) >> 8) ));

}

#define ___swab32(x)

{

? ? ? ? ? ? __u32 __x = (x);

? ? ? ? ? ? ((__u32)(

? ? ? ? ? ? ? ? ? ? ? ? (((__u32)(__x) & (__u32)0x000000ffUL) << 24) |

? ? ? ? ? ? ? ? ? ? ? ? (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) |

? ? ? ? ? ? ? ? ? ? ? ? (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) |

? ? ? ? ? ? ? ? ? ? ? ? (((__u32)(__x) & (__u32)0xff000000UL) >> 24) ));

}

? ? ? ? PowerPC處理器提供了lwbrx,lhbrx辱挥,stwbrx犁嗅,sthbrx四條指令用于處理字節(jié)序的轉(zhuǎn)換以優(yōu)化__swab16和__swap32這類函數(shù)。此外PowerPC處理器中的rlwimi指令也可以用來實(shí)現(xiàn)__swab16和__swap32這類函數(shù)晤碘。

? ? ? ?在對(duì)普通文件進(jìn)行處理也需要考慮端模式問題褂微。在大端模式的處理器下對(duì)文件的32,16位讀寫操作所得到的結(jié)果與小端模式的處理器不同园爷。單純從軟件的角度理解上遠(yuǎn)遠(yuǎn)不能真正理解大小端模式的區(qū)別宠蚂。事實(shí)上,真正的理解大小端模式的區(qū)別童社,必須要從系統(tǒng)的角度肥矢,從指令集,寄存器和數(shù)據(jù)總線上深入理解,大小端模式的區(qū)別甘改。

九旅东、從系統(tǒng)的角度理解端模式

先補(bǔ)充兩個(gè)關(guān)鍵詞,MSB和LSB:

  MSB:MoST Significant Bit ------- 最高有效位

? ? ? ? LSB:Least Significant Bit ------- 最低有效位

? ? ? ? 處理器在硬件上由于端模式問題在設(shè)計(jì)中有所不同十艾。從系統(tǒng)的角度上看抵代,端模式問題對(duì)軟件和硬件的設(shè)計(jì)帶來了不同的影響,當(dāng)一個(gè)處理器系統(tǒng)中大小端模式同時(shí)存在時(shí)忘嫉,必須要對(duì)這些不同端模式的訪問進(jìn)行特殊的處理荤牍。

? ? ? ?PowerPC處理器主導(dǎo)網(wǎng)絡(luò)市場(chǎng),可以說絕大多數(shù)的通信設(shè)備都使用PowerPC處理器進(jìn)行協(xié)議處理和其他控制信息的處理庆冕,這也可能也是在網(wǎng)絡(luò)上的絕大多數(shù)協(xié)議都采用大端編址方式的原因康吵。因此在有關(guān)網(wǎng)絡(luò)協(xié)議的軟件設(shè)計(jì)中,使用小端方式的處理器需要在軟件中處理端模式的轉(zhuǎn)變访递。而Pentium主導(dǎo)個(gè)人機(jī)市場(chǎng)晦嵌,因此多數(shù)用于個(gè)人機(jī)的外設(shè)都采用小端模式,包括一些在網(wǎng)絡(luò)設(shè)備中使用的PCI總線拷姿,F(xiàn)lash等設(shè)備惭载,這也要求在硬件設(shè)計(jì)中注意端模式的轉(zhuǎn)換拔第。

? ? ? ?本文提到的小端外設(shè)是指這種外設(shè)中的寄存器以小端方式進(jìn)行存儲(chǔ)蚀同,如PCI設(shè)備的配置空間蒸苇,NOR FLASH中的寄存器等等甜癞。對(duì)于有些設(shè)備埋心,如DDR顆粒须揣,沒有以小端方式存儲(chǔ)的寄存器诀豁,因此從邏輯上講并不需要對(duì)端模式進(jìn)行轉(zhuǎn)換畔规。在設(shè)計(jì)中伏穆,只需要將雙方數(shù)據(jù)總線進(jìn)行一一對(duì)應(yīng)的互連茎芋,而不需要進(jìn)行數(shù)據(jù)總線的轉(zhuǎn)換。

? ? ? ?如果從實(shí)際應(yīng)用的角度說蜈出,采用小端模式的處理器需要在軟件中處理端模式的轉(zhuǎn)換田弥,因?yàn)椴捎眯《四J降奶幚砥髟谂c小端外設(shè)互連時(shí),不需要任何轉(zhuǎn)換铡原。而采用大端模式的處理器需要在硬件設(shè)計(jì)時(shí)處理端模式的轉(zhuǎn)換偷厦。大端模式處理器需要在寄存器,指令集燕刻,數(shù)據(jù)總線及數(shù)據(jù)總線與小端外設(shè)的連接等等多個(gè)方面進(jìn)行處理只泼,以解決與小端外設(shè)連接時(shí)的端模式轉(zhuǎn)換問題。在寄存器和數(shù)據(jù)總線的位序定義上卵洗,基于大小端模式的處理器有所不同请唱。

? ? ? ?一個(gè)采用大端模式的32位處理器弥咪,如基于E500內(nèi)核的MPC8541,將其寄存器的最高位msb(most significant bit)定義為0十绑,最低位lsb(lease significant bit)定義為31聚至;而小端模式的32位處理器,將其寄存器的最高位定義為31本橙,低位地址定義為0扳躬。與此向?qū)?yīng),采用大端模式的32位處理器數(shù)據(jù)總線的最高位為0甚亭,最高位為31贷币;采用小端模式的32位處理器的數(shù)據(jù)總線的最高位為31,最低位為0亏狰。? ? ? ? ?

? ? ? ?大小端模式處理器外部總線的位序也遵循著同樣的規(guī)律役纹,根據(jù)所采用的數(shù)據(jù)總線是32位,16位和8位暇唾,大小端處理器外部總線的位序有所不同促脉。大端模式下32位數(shù)據(jù)總線的msb是第0位,MSB是數(shù)據(jù)總線的第0~7的字段信不;而lsb是第31位嘲叔,LSB是第24~31字段亡呵。小端模式下32位總線的msb是第31位抽活,MSB是數(shù)據(jù)總線的第31~24位,lsb是第0位锰什,LSB是7~0字段下硕。大端模式下16位數(shù)據(jù)總線的msb是第0位,MSB是數(shù)據(jù)總線的第0~7的字段汁胆;而lsb是第15位梭姓,LSB是第8~15字段。小端模式下16位總線的msb是第15位嫩码,MSB是數(shù)據(jù)總線的第15~7位誉尖,lsb是第0位,LSB是7~0字段铸题。大端模式下8位數(shù)據(jù)總線的msb是第0位铡恕,MSB是數(shù)據(jù)總線的第0~7的字段;而lsb是第7位丢间,LSB是第0~7字段探熔。小端模式下8位總線的msb是第7位,MSB是數(shù)據(jù)總線的第7~0位烘挫,lsb是第0位诀艰,LSB是7~0字段。

? ? ? ? ?由上分析,我們可以得知對(duì)于8位其垄,16位和32位寬度的數(shù)據(jù)總線苛蒲,采用大端模式時(shí)數(shù)據(jù)總線的msb和MSB的位置都不會(huì)發(fā)生變化,而采用小端模式時(shí)數(shù)據(jù)總線的lsb和LSB位置也不會(huì)發(fā)生變化捉捅。

? ? ? ? ?為此撤防,大端模式的處理器對(duì)8位,16位和32位的內(nèi)存訪問(包括外設(shè)的訪問)一般都包含第0~7字段棒口,即MSB寄月。小端模式的處理器對(duì)8位,16位和32位的內(nèi)存訪問都包含第7~0位无牵,小端方式的第7~0字段漾肮,即LSB。由于大小端處理器的數(shù)據(jù)總線其8位茎毁,16位和32位寬度的數(shù)據(jù)總線的定義不同克懊,因此需要分別進(jìn)行討論在系統(tǒng)級(jí)別上如何處理端模式轉(zhuǎn)換。在一個(gè)大端處理器系統(tǒng)中七蜘,需要處理大端處理器對(duì)小端外設(shè)的訪問谭溉。

十、實(shí)際中的例子

? ? ? ?雖然很多時(shí)候橡卤,字節(jié)序的工作已由編譯器完成了扮念,但是在一些小的細(xì)節(jié)上,仍然需要去仔細(xì)揣摩考慮碧库,尤其是在以太網(wǎng)通訊柜与、MODBUS通訊、軟件移植性方面嵌灰。這里弄匕,舉一個(gè)MODBUS通訊的例子。在MODBUS中沽瞭,數(shù)據(jù)需要組織成數(shù)據(jù)報(bào)文迁匠,該報(bào)文中的數(shù)據(jù)都是大端模式,即低地址存高位驹溃,高地址存低位城丧。假設(shè)有一16位緩沖區(qū)m_RegMW[256],因?yàn)槭窃趚86平臺(tái)上吠架,所以內(nèi)存中的數(shù)據(jù)為小端模式:m_RegMW[0].low芙贫、m_RegMW[0].high、m_RegMW[1].low傍药、m_RegMW[1].high……

為了方便討論磺平,假設(shè)m_RegMW[0] = 0x3456; 在內(nèi)存中為0x56魂仍、0x34。

? ? ? ?現(xiàn)要將該數(shù)據(jù)發(fā)出拣挪,如果不進(jìn)行數(shù)據(jù)轉(zhuǎn)換直接發(fā)送擦酌,此時(shí)發(fā)送的數(shù)據(jù)為0x56,0x34。而Modbus是大端的菠劝,會(huì)將該數(shù)據(jù)解釋為0x5634而非原數(shù)據(jù)0x3456赊舶,此時(shí)就會(huì)發(fā)生災(zāi)難性的錯(cuò)誤。所以赶诊,在此之前笼平,需要將小端數(shù)據(jù)轉(zhuǎn)換成大端的,即進(jìn)行高字節(jié)和低字節(jié)的交換舔痪,此時(shí)可以調(diào)用步驟五中的函數(shù)BigtoLittle16(m_RegMW[0])寓调,之后再進(jìn)行發(fā)送才可以得到正確的數(shù)據(jù)

---------------------

作者:ce123

來源:CSDN

原文:https://blog.csdn.net/ce123_zhouwei/article/details/6971544

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接锄码!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夺英,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滋捶,更是在濱河造成了極大的恐慌痛悯,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件重窟,死亡現(xiàn)場(chǎng)離奇詭異载萌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)亲族,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門炒考,熙熙樓的掌柜王于貴愁眉苦臉地迎上來可缚,“玉大人霎迫,你說我怎么就攤上這事×泵遥” “怎么了知给?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長描姚。 經(jīng)常有香客問我涩赢,道長,這世上最難降的妖魔是什么轩勘? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任筒扒,我火速辦了婚禮,結(jié)果婚禮上绊寻,老公的妹妹穿的比我還像新娘花墩。我一直安慰自己悬秉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布冰蘑。 她就那樣靜靜地躺著和泌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祠肥。 梳的紋絲不亂的頭發(fā)上武氓,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音仇箱,去河邊找鬼县恕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剂桥,可吹牛的內(nèi)容都是我干的弱睦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼渊额,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼况木!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旬迹,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤火惊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奔垦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屹耐,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年椿猎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惶岭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡犯眠,死狀恐怖按灶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筐咧,我是刑警寧澤鸯旁,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站量蕊,受9級(jí)特大地震影響铺罢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜残炮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一韭赘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧势就,春花似錦泉瞻、人聲如沸楷怒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸠删。三九已至,卻和暖如春贼陶,著一層夾襖步出監(jiān)牢的瞬間刃泡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工碉怔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烘贴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓撮胧,卻偏偏與公主長得像桨踪,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芹啥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容