转换了半天都没成功,请教高人!! ( 积分: 100 )

  • 主题发起人 主题发起人 szyc927
  • 开始时间 开始时间
S

szyc927

Unregistered / Unconfirmed
GUEST, unregistred user!
请教高人,如何将这段c代码转换为delphi代码
typedef union
{
struct
{
unsigned char a ;
unsigned char b ;
unsigned char c ;
unsigned char d ;
};
unsigned long long_address ;
}IP_ADDRESS ;
 
IP_ADDRESS=record
a,
b,
c,
d:Char;
end;

不知道对不对!
 
试了一下,不对
 
TChars = packed record
a: Char;
b: Char;
c: Char;
d: Char;
end;

IP_ADDRESS = packed record
case Integer of
0: (Chars: TChars);
1: (long_address: Integer);
end;
 
union在Delphi中使用case来实现,你可以参考一下Delphi帮助
Variant parts in records
 
IP_ADDRESS=record
a,
b,
c,
d:Byte;
end;

转贴:
『Delphi和C++数据类型对照表』

Delphi 字长/值域 C++

ShortInt 8位有符号整型 signed char
SmallInt 16位有符号整型 short
LongInt 32位有符号整型 int
Byte 8位无符号整型 unsigned char
Word 16位无符号整型 unsigned short
Integer 32位有符号整型 int
Cardinal 32位无符号整型 unsigned int
Boolean 真/假 bool
ByteBool 真/假 或 8位无符号整型 unsigned char
WordBool 真/假 或 16位无符号整型 unsigned short
LongBool 真/假 或 32位无符号整型 BOOL (WinAPI)
AnsiChar 8位无符号字符 char
WideChar 宽字编码字符 wchar_t
Char 8位无符号字符 char
AnsiString Delphi的字符串类 AnsiString 类
String[n] 老式的Delphi字符串, n = 1..255字节 SmallString<n> 模板类
ShortString 老式的Delphi字符串, 255字节 SmallString<255>
String Delphi的AnsiString类 AnsiString
Single 32位浮点数 float
Double 64位浮点数 double
Extended 80位浮点数 long double
Real 32位浮点数 double
Pointer 32无类型指针 void *
PChar 32位字符型指针 unsigned char *
PAnsiChar 32位ANSI型字符指针 unsigned char *
Comp 64位浮点数 Comp 类
OleVariant OLE可变类型值 OleVariant 类
 
谢谢大家,特别感谢muhx!
 
delphi里没有union对应的功能,无法直接实现。delphi的record虽然允许case,但不共用空间。
用指针可以间接实现:
type
tp1=record a,b,c,d:char; end;
tp2=record
vp1:^tp1;
vp2:^integer;
end;
var
vp:tp2;
i:integer;
begin
vp.vp1:=@i;
vp.vp2:=@i;
{
new(vp.vp1);
vp.vp2:=vp.vp1;
}
end;
太绕了。
不知道有无好的解决方案
 
后退
顶部