zoukankan      html  css  js  c++  java
  • Delphi中Packed和 (Pchar与 Array互转换)

    --------Unit开始---

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;


    Tmyrecord01=record
    S01:string[6];
    I01:Integer;
    D01:Double;
    end;
    Tmyrecord02=record
    D01:Double;
    end;
    Tmyrecord03=record
    S01:string[13];
    S02:string[9];
    S03:string[4];
    D01:Double;//8
    end;
    Tmyrecord04=record
    S01:string[6];
    end;

    TmyrecordPacked01=Packed record
    S01:string[6];//7
    I01:Integer;//4
    D01:Double;//8
    end;
    TmyrecordPacked02= Packed record
    S01:string[13];
    S02:string[9];
    S03:string[4];
    D01:Double;//8
    Array01:array[0..4095] of Char;
    end;
    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    My01:Tmyrecord01;
    My02:Tmyrecord02;
    My03:Tmyrecord03;
    My04:Tmyrecord04;
    p:PChar;
    vs:string;
    begin
    vs:='ABC';
    P:=PChar('中国');
    Memo1.Lines.Add('---------Tmyrecord------------');
    Memo1.Lines.Add('SizeOf(My01): '+IntToStr(SizeOf(My01)));
    Memo1.Lines.Add('SizeOf(My02): '+IntToStr(SizeOf(My02)));
    Memo1.Lines.Add('SizeOf(My03): '+IntToStr(SizeOf(My03)));
    Memo1.Lines.Add('SizeOf(My04): '+IntToStr(SizeOf(My04)));
    My01.S01[0]:='A'; //vs[0] //vs不能从下标0开始,切记!! //S01:string[6];这个却可以从下标0开始,要区分出来;;
    { string[]类型和string类型
    简短的说下:String[]类型,相当于array[0..255] of char的数组 ,也就是说String[i]中的i最大值就是255,下标从0开始;;
    String类型,很特殊,string实际指向的是一个内存,如果此处vs[0]肯定报错的,把这个vs看成数组,vs的下标从1开始,
    vs[0]对于string类型来说很重要保存了vs的长度(哈哈,猜测的,还有引用计数啥的,不清楚,反正有点复杂),不会让你以这种vs[0]方式读取的!
    这里就不去验证了;
    }

    My01.S01:=p;
    Memo1.Lines.Add('My01.S01[0]: '+My01.S01);
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
    My01:TmyrecordPacked01;
    My02:TmyrecordPacked02;
    p,p1:PChar;

    begin
    Memo1.Lines.Add('---------TmyrecordPacked------------');
    Memo1.Lines.Add('SizeOf(My01): '+IntToStr(SizeOf(My01)));
    Memo1.Lines.Add('SizeOf(My02): '+IntToStr(SizeOf(My02)));
    p:=PChar('中国');
    StrCopy(@My02.Array01,p) ;
    p1:=pchar(@My02.Array01);
    Memo1.Lines.Add('p1: '+p1);
    end;

    end.

    ---------------------------------------
    Delphi字符串、PChar与字符数组之间的转换

    设有以下三个变量:
    var
    s:string;
    p:pchar;
    a:array[1..20] of char;
    那么三者之间的转换如下:
    1、字符串到PChar
    p:=PChar(s);
    2、PChar到字符串
    s:=p;
    3、PChar到字符数组
    StrCopy(@a,p);
    4、字符数组到PChar
    PChar(@a);
    5、字符串与字符数组之间的转换就只有通过PChar来中转了。例如下面这个例子:
    procedure TForm1.btn1Click(Sender: TObject);
    var
    str:array[1..10] of char;
    begin
    StrCopy(@str,PChar(mmo1.Text));
    mmo2.Text:=PChar(@str);
    end
    ————————————————
    版权声明:本文为CSDN博主「fowlersong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/pascal4123/article/details/84240559

    ----------------------------------------------

    --------unit结束----

    -------------Form开始

    object Form1: TForm1
    Left = 841
    Top = 452
    Width = 323
    Height = 222
    Caption = 'Form1'
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    object Button1: TButton
    Left = 16
    Top = 144
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
    end
    object Memo1: TMemo
    Left = 0
    Top = 0
    Width = 307
    Height = 121
    Align = alTop
    ImeName = '中文(简体) - 搜狗拼音输入法'
    ScrollBars = ssBoth
    TabOrder = 1
    end
    object Button2: TButton
    Left = 112
    Top = 144
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 2
    OnClick = Button2Click
    end
    end

    -------------Form结束

  • 相关阅读:
    spring整合myBatis
    spring之事物
    spring之AspectJ实现AOP
    AOP之JDK动态代理和CGLib动态代理
    iOS-面试相关<一>
    iOS -调试工具Instruments使用总结
    iOS-阅读器常年崩溃问题记录
    iOS
    ios
    iOS
  • 原文地址:https://www.cnblogs.com/dmqhjp/p/14694913.html
Copyright © 2011-2022 走看看