delphi枚举类型长度默认为2个字节(单字),而在C中枚举为4个字节(双字),如果需要跨这两个平台编程,传输结构时会由于数据长度不一造成灾难。

经过查找资料,原来delphi可以通过{$Z+} {$Z-} {$Z1} {$Z4} 等宏设置枚举类型的长度,小至1个字节,大至4个字节。

官方说明如下:

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsminimumenumerationsize_xml.html

The $Z directive controls the minimum storage size of Delphi enumerated types.

An enumerated type is stored as an unsigned byte if the enumeration has no more than 256 values, and if the type was declared in the {$Z1} state (the default). If an enumerated type has more than 256 values, or if the type was declared in the {$Z2} state, it is stored as an unsigned word. Finally, if an enumerated type is declared in the {$Z4} state, it is stored as an unsigned double word.

The {$Z2} and {$Z4} states are useful for interfacing with C and C++ libraries, which usually represent enumerated types as words or double words.

Note: Note: For backwards compatibility with early versions of Delphi and CodeGear Pascal, the directives {$Z-} and {$Z+} are also supported. They correspond to {$Z1} and {$Z4}, respectively.

例子如下:

http://www.delphibasics.co.uk/RTL.asp?Name=$Z

Example code : Various enum type sizes

type
  {$Z1}
  TCars1  = (Rover, Jaguar, Honda);    // Will fit into 1 byte
  TFruit1 = (Banana=255, Apple, Pear); // Will exceed one byte
  {$Z4}
  TCars2  = (Ford, Nissan, Vauxhall);  // Now uses 4 bytes
  TFruit2 = (Orange=255, Plum, Grape); // Now uses 4 bytes
begin
  ShowMessage('TCars1  size = '+IntToStr(SizeOf(TCars1)));
  ShowMessage('TFruit1 size = '+IntToStr(SizeOf(TFruit1)));
  ShowMessage('TCars2  size = '+IntToStr(SizeOf(TCars2)));
  ShowMessage('TFruit2 size = '+IntToStr(SizeOf(TFruit2)));
end;

TCars1  size = 1
   TFruit1 size = 2
   TCars2  size = 4
   TFruit2 size = 4

转载于:https://www.cnblogs.com/h2zZhou/p/5000153.html

DELPHI设置枚举类型size相关推荐

  1. c++ 给枚举类型设置基础类型

    C++里是枚举类型名后加个冒号再加基础类型 enum Test:byte {   a,b,c }; 当然int好,比byte/short快. 但是这样一来就可以设置自己想要的任何枚举基础类型的! (请 ...

  2. Java枚举类型(enum)详解

    文章目录 理解枚举类型 枚举的定义 枚举实现原理 枚举的常见方法 Enum抽象类常见方法 编译器生成的Values方法与ValueOf方法 枚举与Class对象 枚举的进阶用法 向enum类添加方法与 ...

  3. Java并发:五种线程安全类型、线程安全的实现、枚举类型

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u014454538/ article/details/98515807 1. Java中的线程安全 Java线程安全:狭义地认 ...

  4. Typescript - enum 枚举类型(数值型枚举 / 字符串枚举 / 常量枚举 / 异构枚举 / 计算枚举成员 / 联合枚举和枚举成员类型 / 运行时的枚举 / 环境枚举 / 对象与枚举)教程

    前言 Enums(枚举)是 TypeScript 的少数功能之一,它不是 JavaScript 的类型级扩展,仅支持数字的和基于字符串的枚举. 使用枚举您可以定义一组带名字的常量,并且清晰地表达意图或 ...

  5. Java核心技术----枚举类型与泛型

    一.枚举类型 1.使用枚举类型设置常量 其中,enum是定义枚举类型关键使用枚举类型定义常量的语法如下: public enum Constants{ Constants_A, Constants_B ...

  6. java 枚举类型enum的用法详解

    Java Enum原理 public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要 ...

  7. Java枚举类型与泛型

    一.枚举类型 1.使用枚举类型设置常量 以往设置常量,通常将常量放置在接口中,这样在程序中就可以直接使用,并且该常量不能被修改,因为在接口中定义常量时,该常量的修饰符为final与static.常规定 ...

  8. 简单探讨TypeScript 枚举类型

    这篇文章主要介绍了TypeScript 枚举类型,TypeScript 在 ES 原有类型基础上加入枚举类型,使得在 TypeScript 中也可以给一组数值赋予名字,这样对开发者比较友好,可以理解枚 ...

  9. golang枚举类型 - iota用法拾遗

    在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...

最新文章

  1. VisualStudio opencv配置
  2. Java super和this
  3. 手机技巧:手机用一段时间就发烫,如何解决?
  4. 集合点(掌握)-并发
  5. 微信支付宝个人免签约即时到帐接口开发附demo
  6. eplan2.6安装教程
  7. IBM Notes Domino V10.0.1第一组语言包发布!
  8. ftp服务器有哪些作用,FTP是什么意思 FTP服务器有什么作用及功能
  9. 企业开票信息税号查询接口不是万能的
  10. UI设计书籍推荐,这三本好书你不能错过
  11. 【我想对策划说的事】-- 入职dy一年后被邀请召开的扯淡分享会讲稿
  12. ipone6界面设计标准
  13. Learning AV Foundation(三)AVAudioRecorder
  14. 案例+图解带你一文读懂Canvas【2W字,建议收藏】
  15. 盘点2021年晋升为Apache TLP的大数据相关项目
  16. 阿里被转载上100W次的Java面试题教程,已助我拿下9家大厂offer
  17. GoLang之图解channel之读、写、关闭
  18. 浙大第一愤青教授的质疑--教育究竟为谁服务
  19. MySQL 如何查看表和数据库索引
  20. 数字电子技术——复试常见问题

热门文章

  1. 数据科学的5种基本的面向业务的批判性思维技能
  2. HTML转存问题测试
  3. UART协议驱动设计
  4. 自学考试c语言真题,自学考试《C语言程序设计》练习题及答案
  5. mysql存储引擎innodb_MySQL常用存储引擎之Innodb
  6. 怎么在终端启用python_在终端启动Python时报错的解决方案
  7. 化验室计算机管理制度,实验室试剂管理制度
  8. java 向上抛异常_java throws 向上抛出的概念问题
  9. html文本设置float,css怎么float(浮动)?
  10. 2017蓝桥c语言真题,[蓝桥杯][2017年第八届真题]发现环 (C语言代码)------------C语言——菜鸟级...