C++ Endian具體操作方法講解
C++編程語(yǔ)言對(duì)于編程人員來(lái)說(shuō)是非常重要的一個(gè)計(jì)算機(jī)應(yīng)用語(yǔ)言。我們今天會(huì)在這篇文章中為大家詳細(xì)介紹一下C++ Endian的基本應(yīng)用方式,希望朋友們可以從中對(duì)C++編程語(yǔ)言有一個(gè)深刻的了解。#t#
最近寫(xiě)了一段代碼來(lái)讀取和輸出一個(gè)文件.這個(gè)文件的標(biāo)準(zhǔn)規(guī)范里面同時(shí)使用了LittleEndian和BigEndian.***次在C++中接觸這個(gè)問(wèn)題.所以需要做一下工作:
1.判斷當(dāng)前CPU使用哪種C++ Endian?
2.如果當(dāng)前數(shù)據(jù)的Endian和當(dāng)前CPU相反,如何裝換?
代碼相當(dāng)直觀:
1.判斷CPU的C++ Endian:
- union {
- short s;
- char c[sizeof(short)];
- } un;
- un.s = 0x0102;
- _isLittleEnd = (un.c[0] == 0x2);
***的_isLittleEnd是一個(gè)bool變量用來(lái)保存判定的結(jié)果:
2.如何把一個(gè)相反C++ Endian的數(shù)據(jù)轉(zhuǎn)換過(guò)來(lái):
- void Helper::swap(char ch[], int count) {
- int size = count / 2;
- int max = count - 1;
- for (int i = 0; i < size; i++) {
- char t = ch[i];
- ch[i] = ch[max - i];
- ch[max - i] = t;
- }
其實(shí)是將char[]數(shù)組就地反轉(zhuǎn).
3.如何把short/int/double等數(shù)據(jù)反轉(zhuǎn)過(guò)來(lái)呢:
以int 為例的代碼如下:
- int Helper::swap(int data) {
- union {
- int _i;
- char _c[sizeof(int)];
- } un;
- un._i = data;
- swap(un._c, sizeof(int));
- return un._i;
- }
到目前為止,用這個(gè)算法做的數(shù)據(jù)轉(zhuǎn)換還沒(méi)有發(fā)現(xiàn)錯(cuò)誤的情況.也許是沒(méi)碰到罷了.
例如 我沒(méi)有測(cè)試1)對(duì)于負(fù)數(shù)這個(gè)算法是否正確.2)對(duì)于無(wú)符號(hào)數(shù)這個(gè)算法是否正確.因?yàn)檫@個(gè)文件規(guī)范里面不會(huì)出現(xiàn)這兩種數(shù).
內(nèi)容比較基礎(chǔ).但覺(jué)得值得分享。在首頁(yè)上掛一會(huì). 出去腐敗一把,回來(lái)再撤銷(如果回來(lái)還比較清醒的話).
以上就是對(duì)C++ Endian基本概念的講解