Delphi与C之间的类型对应表

Delphi与C之间的类型对应表.其中左边是C类型,右边是对应的Delphi类型:

ABC -> TABC
ACCEL -> TAccel
ATOM -> TAtom
BITMAP -> TBitMap
BITMAPCOREHEADER -> TBitmapCoreHeader
BITMAPCOREINFO -> TBitmapCoreInfo
BITMAPFILEHEADER -> TBitmapFileHeader
BITMAPINFO -> TBitmapInfo
BITMAPINFOHEADER -> TBitmapInfoHeader
BOOL -> Bool
CBT_CREATEWND -> TCBT_CreateWnd
CBTACTIVATESTRUCT -> TCBTActivateStruct
CHAR -> Char
CHAR* -> PChar
CLIENTCREATESTRUCT -> TClientCreateStruct
COLORREF -> TColorRef
COMPAREITEMSTRUCT -> TCompareItemStruct
COMSTAT -> TComStat
CREATESTRUCT -> TCreateStruct
CTLINFO -> TCtlInfo
CTLSTYLE -> TCtlStyle
CTLtype -> TCtltype
DCB -> TDCB
DDEAACK -> TDDEAck
DDEADVISE -> TDDEAdvise
DDEDATA -> TDDEData
DDEPOKE -> TDDEPoke
DEBUGHOOKINFO -> TDebugHookInfo
DELETEITEMSTRUCT -> TDeleteItemStruct
DEVMODE -> TDevMode
DOUBLE -> Double
DRAWITEMSTRUCT -> TDrawItemStruct
DWORD -> LongInt
ENUMLOGFONT -> TEnumLogFont
EVENTMSG -> TEventMsg
FARPROC -> TFarProc
FIXED -> TFixed
FLOAT -> Single
GLYPHMETRICS -> TGlyphMetrics
HANDLE -> THandle
HANDLETABLE -> THandleTable
HARDWAREHOOKSTRUCT -> THardwareHookStruct
HELPWININFO -> THelpWinInfo
INT -> Integer
KERNINGPAIR -> TKerningPair
LOGBRUSH -> TLogBrush
LOGFONT -> TLogFont
LOGPALETTE -> TLogPalette
LOGPEN -> TLogPen
LONG -> LongInt
LONG DOUBLE -> Extended
LONG INT -> LongInt
LPSTR -> PChar
LPWSTR -> PWideChar
MAT2 -> TMat2
MDICREATESTRUCT -> TMDICreateStruct
MEASUREITEMSTRUCT -> TMeasureItemStruct
MENUITEMTEMPLATE -> TMenuItemTemplate
MENUITEMTEMPLATEHEADER -> TMenuItemTemplateHeader
METAFILEPICT -> TMetaFilePict
METAHEADER -> TMetaHeader
METARECORD -> TMetaRecord
MINMAXINFO -> TMinMaxInfo
MOUSEHOOKSTRUCT -> TMouseHookStruct
MSG -> TMsg
MULTIKEYHELP -> TMultiKeyHelp
NCCALCSIZE_PARAMS -> TNCCalcSize_Params
NEWTEXTMETRIC -> TNewTextMetric
OFSTRUCT -> TOFStruct
OUTLINETEXTMETRIC -> TOutlineTextMetric
PAINTSTRUCT -> TPaintStruct
PALETTEENTRY -> TPaletteEntry
PANOSE -> TPanose
PATTERN -> TPattern
POINTFX -> TPointFX
PSTR -> PChar
PWSTR -> PWideChar
RASTERIZER_STATUS -> TRasterizer_Status
RGBQUAD -> TRGBQuad
RGBTRIPLE -> TRGBTriple
SEGINFO -> TSegInfo
SHORT -> SmallInt
SHORT INT -> SmallInt
SIZE -> TSize
TEXTMETRIC -> TTextMetric
TPOINT -> TPoint
TRECT -> TRect
TTPOLYCURVE -> TTTPolyCurve
TTPOLYGONHEADER -> TPolygonHeader
UINT -> Word
UNSIGNED -> Word
UNSIGNED CHAR -> Byte
UNSIGNED INT -> Word
UNSIGNED LONG -> LongInt(DWORD)
UNSIGNED LONG INT -> LongInt
UNSIGNED SHORT -> Word
UNSIGNED SHORT INT -> Word
VOID* -> Pointer
WINDOWPLACEMENT -> TWindowPlacement
WINDOWPOS -> TWindowPos
WNDCLASS -> TWndClass
WORD -> Word  

 

下面是一些 C 变量类型和 Pascal 变量类型对照列表。

HWND = type LongWord (Cardinal)
HMENU = type LongWord
    所有 HANDLE 类型均是 type LongWord (Cardinal) 或 THandle
        (HICON, HBITMAP, HFONT, HBRUSH, HPEN)
BYTE = Byte
SHORT = Smallint;
INT = Integer
WORD = Word
DWORD = LongWord; (Cardinal)
LONG = Integer
LONGLONG = Int64
UINT = LongWord; (Cardinal)
ASCI null terminated string = PAnsiChar or PChar
LPSTR = PAnsiChar;
LPCTSTR = PAnsiChar;
ULONG = Cardinal;
BOOLEAN = Boolean
BOOL = LongBool
LPVOID = Pointer
PSID = Pointer
LCID = DWORD, LongWord (Cardinal)
LANGID = Word

  理解 Win32 API 帮助里面的数据类型可能会有点困惑,因为里面好几个 C 类型被作为一个 Pascal 数据类型了,比如 DWORD、UNIT、HWND、ULONG 和 LCID 类型在 Pascal 语言里都是 Cardinal 类型。更加令人困惑的是,很多 Delphi 的示例代码使用 Pascal 类型 LongWord 代替 Cardinal 类型,使用 LongInt 代替 Integer 类型。如果你觉得 C 语言数据类型难以把握,你通常可以在代码中使用 C 语言数据类型,因为这在 windows.pas 单元大部分都有这些类型的定义。比如, windows.pas 单元有如下定义: 

type
DWORD = LongWord;
UINT = LongWord;
LCID = DWORD;
ULONG = Cardinal;

 

CRC(Cyclic Redundancy Check)循环冗余校验码(转) 未记录作者的网址,作者见谅。 是常用的校验码,在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来‘确认信息’的困惑,书上提到红军和蓝军通信联合进攻山下的敌军的例子,第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是‘确认信息’如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条‘对确认的确认信息’,但同样的问题还是不能解决,红军仍然不敢贸然行动。 对通信的可靠性检查就需要‘校验’,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。 CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。 它的编码规则是: 1、首先将原信息码(kbit)左移r位(k+r=n) 2、运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码。 非常简单,要说明的:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是: 0+0=1+1=0,1+0=0+1=1 即‘异’则真,‘非异’则假。 由此得到定理:a+b+b=a 也就是‘模2减’和‘模2加’直值完全相同。 有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码。 例如: g(x)=x4+x3+x2+1,(7,3)码,信息码110产生的CRC码就是: 11 11101 | 110,0000 111 01 1 0100 1 1101 1001 余数是1001,所以CRC码是110,1001 标准的CRC码是,CRC-CCITT和CRC-16,它们的生成多项式是: CRC-CCITT=x16+x12+x5+1 CRC-16=x16+x15+x2+1 CRC 的计算原理如下(一个字节的简单例子) 11011000 00000000 00000000 <- 一个字节数据, 左移 16b ^10001000 00010000 1 <- CRC-CCITT 多项式, 17b -------------------------- 1010000 00010000 10 <- 中间余数 ^1000100 00001000 01 ------------------------- 10100 00011000 1100 ^10001 00000010 0001 ----------------------- 101 00011010 110100 ^100 01000000 100001 --------------------- 1 01011010 01010100 ^1 00010000 00100001 ------------------- 01001010 01110101 <- 16b CRC 仿此,可推出两个字节数据计算如下:d 为数据,p 为项式,a 为余数 dddddddd dddddddd 00000000 00000000 <- 数据 D ( D1, D0, 0, 0 ) ^pppppppp pppppppp p <- 多项式 P ----------------------------------- ... aaaaaaaa aaaaaaaa 0 <- 第一次的余数 A'''''''' ( A''''''''1, A''''''''0 ) (备注:实际余数) ^pppppppp pppppppp p -------------------------- ... aaaaaaaa aaaaaaaa <- 结果 A ( A1, A0 ) 由此与一字节的情况比较,将两个字节分开计算如下: 先算高字节: dddddddd 00000000 00000000 00000000 <- D1, 0, 0, 0 ^pppppppp pppppppp p <- P ----------------------------------- ... aaaaaaaa aaaaaaaa <- 高字节部分余数 PHA1, PHA0 此处的部分余数与前面两字节算法中的第一次余数有如下关系,即 A''''''''1 = PHA1 ^ D0, A''''''''0 = PHA0 备注:(A XOR B) XOR B= A XOR (B XOR B)=A aaaaaaaa aaaaaaaa <- PHA1, PHA0 ^dddddddd <- D0 ----------------- aaaaaaaa aaaaaaaa <- A''''''''1, A''''''''0 低字节的计算: aaaaaaaa 00000000 00000000 <- A''''''''1, 0, 0 ^pppppppp pppppppp p <- P -------------------------- ... aaaaaaaa aaaaaaaa <- 低字节部分余数 PLA1, PLA0 ^aaaaaaaa <- A''''''''0 , 即 PHA0 ----------------- aaaaaaaa aaaaaaaa <- 最后的 CRC ( A1, A0 ) 规律如下: 设部分余数函数 PA = f( d ) 其中 d 为一个字节的数据(注意,除非 n = 0 ,否则就不是原始数据,见下文) 第 n 次的部分余数 PA( n ) = ( PA( n - 1 ) << 8 ) ^ f( d ) 其中的 d = ( PA( n - 1 ) >> 8 ) ^ D( n ) 其中的 D( n ) 才是一个字节的原始数据。 公式如下: PA( n ) = ( PA( n - 1 ) << 8 ) ^ f( ( PA( n - 1 ) >> 8 ) ^ D( n ) ) 可以注意到函数 f( d ) 的参数 d 为一个字节,对一个确定的多项式 P, f( d ) 的返回值 是与 d 一一对应的,总数为 256 项,将这些数据预先算出保存在里,f( d )就转换为一 个查的过程,速度也就可以大幅提高,这也就是查法计算 CRC 的原理. 在网上找了很多文章,不知为啥,算出的结果都有异样,所以找到一个C写的与在线CRC工具网站是一一对应的,所以将C翻译成delphi, 为delphi增砖添瓦 :) 在线工具: 在线工具1 http://www.lammertbies.nl/comm/info/crc-calculation.html 在线工具2 http://zorc.breitbandkatze.de/crc.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值