zoukankan      html  css  js  c++  java
  • 关于结构体与类型转换的一点小技巧


    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Button5: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure Button5Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    type {下面两个结构体的大小都是 4 字节, 相当于一个 Cardinal 或 Integer 或 DWORD 的大小}
      TMyByteStruct = record
        b1: Byte;
        b2: Byte;
        b3: Byte;
        b4: Byte;
      end;
    
      TMyWordStruct = record
        w1: Word;
        w2: Word;
      end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ByteStruct: TMyByteStruct;
      num: Cardinal;
    begin
      {假如}
      ByteStruct.b1 := $A1;
      ByteStruct.b2 := $B2;
      ByteStruct.b3 := $C3;
      ByteStruct.b4 := $D4;
      {那么}
      num := Cardinal(ByteStruct);
      ShowMessageFmt('$%x', [num]); //$D4C3B2A1
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      WordStruct: TMyWordStruct;
      num: Cardinal;
    begin
      {假如}
      WordStruct.w1 := $ABCD;
      WordStruct.w2 := $1234;
      {那么}
      num := Cardinal(WordStruct);
      ShowMessageFmt('$%x', [num]); //$1234ABCD
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      num: Cardinal;
      ByteStruct: TMyByteStruct;
    begin
      num := $ABCD1234;
      Cardinal(ByteStruct) := num;
      //ByteStruct := TMyByteStruct(num); {这同上一句}
    
      ShowMessageFmt('$%x', [ByteStruct.b1]); //$34
      ShowMessageFmt('$%x', [ByteStruct.b2]); //$12
      ShowMessageFmt('$%x', [ByteStruct.b3]); //$CD
      ShowMessageFmt('$%x', [ByteStruct.b4]); //$AB
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    var
      num: Cardinal;
      WordStruct: TMyWordStruct;
    begin
      num := $ABCD1234;
      Cardinal(WordStruct) := num;
      //WordStruct := TMyWordStruct(num); {这同上一句}
    
      ShowMessageFmt('$%x', [WordStruct.w1]); //$1234
      ShowMessageFmt('$%x', [WordStruct.w2]); //$ABCD
    end;
    
    procedure TForm1.Button5Click(Sender: TObject);
    var
      ByteStruct: TMyByteStruct;
      WordStruct: TMyWordStruct;
    begin
      WordStruct.w1 := $2211;
      WordStruct.w2 := $4433;
    
      Cardinal(ByteStruct) := Cardinal(WordStruct);
      //ByteStruct := TMyByteStruct(WordStruct); {这同上一句}
    
      ShowMessageFmt('$%x', [ByteStruct.b1]); //$11
      ShowMessageFmt('$%x', [ByteStruct.b2]); //$22
      ShowMessageFmt('$%x', [ByteStruct.b3]); //$33
      ShowMessageFmt('$%x', [ByteStruct.b4]); //$44
    end;
    
    end.
    
  • 相关阅读:
    局域网搭建https局域网
    在内部局域网内搭建HTTPs
    在局域网内实现https安全访问
    http网站转换成https网站
    iis6 和iis7s上整个网站重定向
    我们在部署 HTTPS 网站时,该如何选择SSL证书?
    HTML:几个常见的列表标签
    HTML:基本的标签
    iOS: 字体样式
    iOS: 首次使用App时,显示半透明新手指引
  • 原文地址:https://www.cnblogs.com/del/p/1373370.html
Copyright © 2011-2022 走看看