【问题标题】:cpp to delphi "byte [enum]"cpp到delphi“字节[枚举]”
【发布时间】:2021-03-28 18:58:25
【问题描述】:

我在将结构从 C++ 转换为 Delphi 时遇到问题。

在 C++ 标头中,结构的三个字段具有到枚举值的字节数组。 我假设它是顺序值,因为枚举没有值。

//Part of struct declaring a byte array of NET_COLOR_TYPE_MAX

    BYTE                byColorSimilar[NET_COLOR_TYPE_MAX];// Object color similarity, the range :0-100, represents an array subscript Colors, see EM_COLOR_TYPE, 
    BYTE                byUpperBodyColorSimilar[NET_COLOR_TYPE_MAX]; // When upper body color similarity (valid object type man , 
    BYTE                byLowerBodyColorSimilar[NET_COLOR_TYPE_MAX]; // Lower body color similarity when objects (object type human valid , 

枚举具有NET_COLOR_TYPE_MAX

// color type
typedef enum
{
    NET_COLOR_TYPE_RED,                                     // red
    NET_COLOR_TYPE_YELLOW,                                  // yellow
    NET_COLOR_TYPE_GREEN,                                   // green
    NET_COLOR_TYPE_CYAN,                                    // cyan
    NET_COLOR_TYPE_BLUE,                                    // glue
    NET_COLOR_TYPE_PURPLE,                                  // purple
    NET_COLOR_TYPE_BLACK,                                   // black
    NET_COLOR_TYPE_WHITE,                                   // white
    NET_COLOR_TYPE_MAX,
}EM_COLOR_TYPE;

我尝试使用XXX : array[0..99] of byte,因为第一个声明中的 cmets 说:范围:0-100,但指针结果是错位的数据。

如何在 Delphi 中声明这个变量?使用枚举顺序作为值?如:NET_COLOR_TYPE_RED 为 0,NET_COLOR_TYPE_MAX 为 8)

【问题讨论】:

    标签: c++ delphi enums


    【解决方案1】:

    您可以使用 NET_COLOR_TYPE_MAX 枚举值来声明数组,就像 C++ 代码一样。请记住,索引为 0 的数组的上限是元素计数的 -1,例如:

    type
      EM_COLOR_TYPE = (
        NET_COLOR_TYPE_RED,                                     // red
        NET_COLOR_TYPE_YELLOW,                                  // yellow
        NET_COLOR_TYPE_GREEN,                                   // green
        NET_COLOR_TYPE_CYAN,                                    // cyan
        NET_COLOR_TYPE_BLUE,                                    // glue
        NET_COLOR_TYPE_PURPLE,                                  // purple
        NET_COLOR_TYPE_BLACK,                                   // black
        NET_COLOR_TYPE_WHITE,                                   // white
        NET_COLOR_TYPE_MAX
     );
    
    byColorSimilar: array[0..NET_COLOR_TYPE_MAX-1] of Byte;
    byUpperBodyColorSimilar: array[0..NET_COLOR_TYPE_MAX-1] of Byte;
    byLowerBodyColorSimilar: array[0..NET_COLOR_TYPE_MAX-1] of Byte;
    

    【讨论】:

      【解决方案2】:

      就像我怀疑的那样,数组的大小是枚举值的顺序

      此更改有效;

          byColorSimilar: array[0..8] of Byte;            
          byUpperBodyColorSimilar: array[0..8] of Byte;   
          byLowerBodyColorSimilar: array[0..8] of Byte;   
      
      

      【讨论】:

      • 数组的大小是NET_COLOR_TYPE_MAX (8) 个字节,所以正确的范围是0..7
      猜你喜欢
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      相关资源
      最近更新 更多