说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

C++共用体转delphi,如何写?

编辑:说三道四文库 发布时间:2018-09-19 01:51
HTML文档下载 WORD文档下载 PDF文档下载
typedef unsigned char  BOOLEAN;
typedef unsigned char  INT8U;                   /* Unsigned  8 bit quantity                           */
typedef signed   char  INT8S;                   /* Signed    8 bit quantity                           */
typedef unsigned short INT16U;                  /* Signed   16 bit quantity                           */
typedef signed   short INT16S;                  /* Unsigned 32 bit quantity                           */
typedef unsigned int   INT32U;                  /* Unsigned 32 bit quantity                           */
typedef signed   int   INT32S;                  /* Signed   32 bit quantity                           */
typedef float          FP32;                    /* Single precision floating point                    */
typedef double         FP64;                    /* Double precision floating point                    */

typedef union {
INT16U     hword;
#ifdef __BIG_ENDIAN
struct {
INT8U  high;
INT8U  low;
} bytes;
#else
struct {
INT8U  low;
INT8U  high;
} bytes;
#endif
} HWORD_UNION;

分数不多,请高手帮忙
record
case
举个例子 system单元复制的

  TFileRec = packed record (* must match the size the compiler generates: 592 bytes *)
    Handle: Integer;
    Mode: Word;
    Flags: Word;
    case Byte of
      0: (RecSize: Cardinal);   //  files of record
      1: (BufSize: Cardinal;    //  text files
          BufPos: Cardinal;
          BufEnd: Cardinal;
          BufPtr: PAnsiChar;
          OpenFunc: Pointer;
          InOutFunc: Pointer;
          FlushFunc: Pointer;
          CloseFunc: Pointer;
          UserData: array[1..32] of Byte;
          {$IFNDEF UNICODE}
          Name: array[0..259] of AnsiChar;
          {$ELSE}
          Name: array[0..259] of WideChar;
          {$ENDIF}
      );
  end;
type
  HWORD_UNION = Cardinal;

var
  V: HWORD_UNION;
begin
  V := $12345678;
  LongRec(V).Bytes[0]...[3]
  LongRec(V).Words[0]...[1]
  LongRec(V).hi or lo
end;
我的理解是union要用case,可是有两个问题搞不明白,首先union中的判断如何转换?例如:#ifdef __BIG_ENDIAN 转换到delphi中时如何表示?还有就是把union转换到delphi时如何使用?
麻烦高手针对这个union转换到delphi给指点下,先谢谢啦!
应该使用编译指令吧。
哈哈,2ccc上也有你发的帖子啊。解决了吧?
copy过来,学习一下。

 TWordRec = packed record
    case Integer of
      0: (AWord: Word);
      1: (
{$IFDEF BIG_ENDIAN}
          HighByte: Byte;
          LowByte: Byte;
{$ELSE}
          LowByte: Byte;
          HighByte: Byte;
{$ENDIF}
         );
  end;
解决了,结贴散分
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘