程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Endian具體操作方法講解

C++ Endian具體操作方法講解

編輯:C++入門知識

C++編程語言對於編程人員來說是非常重要的一個計算機應用語言。我們今天會在這篇文章中為大家詳細介紹一下C++ Endian的基本應用方式,希望朋友們可以從中對C++編程語言有一個深刻的了解。

  • C++變量聲明相關概念解析
  • C++實現WPF動畫具體操作方法詳解
  • C++中文字符相關應用方法詳解
  • C++虛構函數給我們帶來哪些好處
  • C++位操作基本含義詳解

最近寫了一段代碼來讀取和輸出一個文件.這個文件的標准規范裡面同時使用了LittleEndian和BigEndian.第一次在C++中接觸這個問題.所以需要做一下工作:

1.判斷當前CPU使用哪種C++ Endian?

2.如果當前數據的Endian和當前CPU相反,如何裝換?

代碼相當直觀:

1.判斷CPU的C++ Endian:

  1. union {  
  2. short s;  
  3. char c[sizeof(short)];  
  4. } un;  
  5. un.s = 0x0102;  
  6. _isLittleEnd = (un.c[0] == 0x2); 

最後的_isLittleEnd是一個bool變量用來保存判定的結果:

2.如何把一個相反C++ Endian的數據轉換過來:

  1. void Helper::swap(char ch[], int count) {  
  2. int size = count / 2;  
  3. int max = count - 1;  
  4. for (int i = 0; i < size; i++) {  
  5. char t = ch[i];  
  6. ch[i] = ch[max - i];  
  7. ch[max - i] = t;  

其實是將char[]數組就地反轉.

3.如何把short/int/double等數據反轉過來呢:

以int 為例的代碼如下:

  1. int Helper::swap(int data) {  
  2. union {  
  3. int _i;  
  4. char _c[sizeof(int)];  
  5. } un;  
  6. un._i = data;  
  7. swap(un._c, sizeof(int));  
  8. return un._i;  

到目前為止,用這個算法做的數據轉換還沒有發現錯誤的情況.也許是沒碰到罷了.

例如 我沒有測試1)對於負數這個算法是否正確.2)對於無符號數這個算法是否正確.因為這個文件規范裡面不會出現這兩種數.

內容比較基礎.但覺得值得分享。在首頁上掛一會. 出去腐敗一把,回來再撤銷(如果回來還比較清醒的話).

以上就是對C++ Endian基本概念的講解

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved