博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACE服务端编程2:ACE跨平台之数据类型和宽字符
阅读量:7249 次
发布时间:2019-06-29

本文共 1388 字,大约阅读时间需要 4 分钟。

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的编译方法可以参考之前写的:

数据类型


不同的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解决其他三个编译器差异的实现在后续博文中讲解。


记录,为更好的自己!

转载于:https://www.cnblogs.com/ym123/p/4519030.html

你可能感兴趣的文章
磨刀霍霍:爬爬爬爬爬爬虫爬起来~
查看>>
RxJava中的Observable,多Subscribers
查看>>
I/O模型和Java NIO源码分析
查看>>
第二天-《企业应用架构模式》-组织领域逻辑
查看>>
日志服务与SIEM(如Splunk)集成方案实战
查看>>
解决packet_write_wait: Connection to...: Broken pipe
查看>>
图学ES6-3.变量的解构赋值
查看>>
web3j的maven插件
查看>>
帮你理清React的生命周期
查看>>
堆和堆排序
查看>>
新手也能看懂,消息队列其实很简单
查看>>
全网稀缺的快应用开源项目-熊宝儿歌故事QuickApp
查看>>
【大数据实践】KSQL流处理——如何将多个STREAM输出到一个TOPIC
查看>>
Vue组件通信的几种方式
查看>>
09.Java数据算法
查看>>
git日常使用经验总结
查看>>
ELF文件解析(一):Segment和Section
查看>>
一个由于Function.name造成的兼容性bug
查看>>
比特币钱包隔离认证开发指南
查看>>
《从0到1学习Flink》—— Data Sink 介绍
查看>>