程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ACE服務端編程2:ACE跨平台之數據類型和寬字符,ace服務端

ACE服務端編程2:ACE跨平台之數據類型和寬字符,ace服務端

編輯:C++入門知識

ACE服務端編程2:ACE跨平台之數據類型和寬字符,ace服務端


ACE網絡庫的主要優勢之一就是跨平台,ACE提供了操作系統API和編譯器級別的跨平台解決方法,使開發人員不用再去關心操作系統和編譯器的差異,但因此也帶來了ACE的復雜性。

ACE網絡庫的組織結構主要分為四層:OS適配層、wrapper facade層、框架層、服務層,其中OS適配層為操作系統API提供了包裝函數,保證了系統級的跨平台特性。

而不同的C++編譯器在以下方面也有明顯的差異:

1、模版;

2、數據類型和寬字符;

3、運行時初始化和關閉;

4、分配堆內存;

以上主要參考自APG裡內容,但APG有些過於陳舊,例如其中提到的ACE_OS為了避免編譯器不支持命名空間,使用類來實現,而在ACE的新版本中已改為命名空間實現。

本文主要討論數據類型和寬字符的ACE跨平台解決方式,基於ACE 6.0版本,ACE的編譯方法可以參考之前寫的http://www.cnblogs.com/ym123/p/4277256.html:

數據類型


不同的C++編譯器的基本數據不同,通常通過預定義類型來解決此,這也是C++常用技巧。

ACE也定義了常用的基本類型:

ACE_INT8、ACE_INT16、ACE_INT32、ACE_INT64和無符號ACE_UINT8、ACE_UINT16、ACE_UINT32、ACE_UINT64;

同時ACE還提供了SIZEOF的定義,可以方便獲得該類型在編譯器的長度:

ACE_SIZEOF_LONG、ACE_SIZEOF_INT、ACE_SIZEOF_CHAR...

ACE還提供了大尾和小尾的定義:

ACE_BYTE_ORDER,其值是ACE_BIG_ENDIAN或是ACE_LITTLE_ENDIAN;

如果數據類型的尺寸對你的程序很重要,就不應該依賴編譯器的硬件尺寸而是使用這些基礎類型,例如常見的確定TCP數據包內容長度的頭尺寸,就應該明確長度。

這些類型定義在ace/Basic_Types.h頭文件中。

窄字符和寬字符


ACE定義了兩個常量:

ACE_HAS_WCHAR 用於啟用ACE的寬字符配置;
ACE_USES_WCHAR 用於指示ACE在內部使用寬字符配置。

這兩個常量在編譯ACE網絡庫時起作用,如果想使用寬字符,編譯ACE時在config.h中輸入:

#define ACE_HAS_WCHAR

#define ACE_USE_WCHAR

ACE定義了ACE_TCHAR類型,根據ACE_USES_WCHAR使用char或者wchar_t;

ACE_TEXT(str),根據ACE_USES_WCHAR正確定義字符串文本;

ACE_TEXT_CHAR_TO_TCHAR(str),如果需要,把char * 轉換為ACE_TCHAR;

ACE_TEXT_WCHAR_TO_TCHAR(str),如果需要,把wchar_t *轉換為ACE_TCHAR;

ACE_TEXT_ALWAYS_CHAR(str),如果需要,把ACE_TCHAR轉換為char *;

ACE定義了ACE_CString和ACE_WString類型,存取窄字符串和寬字符串,具體用法與std::string類型相似,定義在ace/SString.h頭文件中。

ACE解決其他三個編譯器差異的實現在後續博文中講解。


記錄,為更好的自己!

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