编辑:说三道四文库 发布时间:2018-04-26 02:16
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;
解决了,结贴散分