首页 > 其他分享 >delphi Byte 与 AnsiChar、WideChar 相互转换

delphi Byte 与 AnsiChar、WideChar 相互转换

时间:2024-02-24 11:22:19浏览次数:25  
标签:function const AnsiChar delphi bys WideChar Integer Byte

Byte 与 AnsiChar、WideChar 相互转换

代码

Byte转AnsiChar、WideChar

procedure TForm1.Button1Click(Sender: TObject);
var
  ac: AnsiChar;
  wc: WideChar;
  bys: TBytes;
begin
  //ANSI编码
  ac := 'a';
  bys := BytesOf(ac);
  Memo1.Lines.Add(bys[0].ToString);
  //Unicode编码
  wc := 'a';
  bys := WideBytesOf(wc);
  Memo1.Lines.Add(bys[0].ToString);
  Memo1.Lines.Add(bys[1].ToString);
end;

D7中没有TEncoding

procedure TForm1.Button1Click(Sender: TObject);
var
  ac: AnsiChar;
  wc: WideChar;
  b1, b2: Byte;
begin
  //ANSI编码
  ac := 'a';
  b1 := Byte(ac);
  Memo1.Lines.Add(IntToStr(b1));
  //Unicode编码
  wc := 'a';
  b1 := WordRec(wc).Lo;
  b2 := WordRec(wc).Hi;
  Memo1.Lines.Add(IntToStr(b1));
  Memo1.Lines.Add(IntToStr(b2));
end;

AnsiChar、WideChar转Byte

procedure TForm1.Button2Click(Sender: TObject);
var
  bys: TBytes;
  chars: TCharArray;
begin
  //ANSI编码
  SetLength(bys, 1);
  bys[0] := 97;
  chars := TEncoding.ANSI.GetChars(bys);
  Memo1.Lines.Add(chars[0]);
  //Unicode编码
  SetLength(bys, 2);
  bys[0] := 97;
  bys[1] := 0;
  Memo1.Lines.Add(chars[0]);
end;

D7中没有TEncoding

procedure TForm1.Button2Click(Sender: TObject);
var
  ac: AnsiChar;
  wc: WideChar;
  b1, b2: Byte;
begin
  //ANSI编码
  b1 := 97;
  ac := AnsiChar(b1);
  Memo1.Lines.Add(ac);
  //Unicode编码
  b1 := 97;
  b2 := 0;
  wc := WideChar(MakeWord(b1, b2));
  Memo1.Lines.Add(wc);
end;

方法

System.SysUtils.BytesOf

function BytesOf(const Val: RawByteString): TBytes;
function BytesOf(const Val: WideChar): TBytes;
function BytesOf(const Val: AnsiChar): TBytes; overload;
function BytesOf(const Val: UnicodeString): TBytes;
function BytesOf(const Val: Pointer; const Len: Integer): TBytes;

将字符串或字符转换为字节数组。

重载

BytesOf(UnicodeString )BytesOf(WideString ) 使用 TEncoding.Default 属性表示的默认系统区域设置进行转换。

System.SysUtils.WideBytesOf

function WideBytesOf(const Value: UnicodeString): TBytes;

将 Unicode 字符串转换为字节数组。使用 TEncoding.Unicode 属性表示的 UTF-16 编码进行转换。

BytesOf 方法不同,生成的字节数组包含输入字符串中每个字符的两个字节。

System.SysUtils.TEncoding.GetChars

function GetChars(Bytes: PByte; ByteCount: Integer; Chars: PChar; CharCount: Integer): Integer; overload;
function GetChars(const Bytes: array of Byte): TCharArray; overload;
function GetChars(const Bytes: TBytes): TCharArray; overload;
function GetChars(const Bytes: array of Byte; ByteIndex, ByteCount: Integer): TCharArray; overload;
function GetChars(const Bytes: TBytes; ByteIndex, ByteCount: Integer): TCharArray; overload;
function GetChars(const Bytes: array of Byte; ByteIndex, ByteCount: Integer;
const Chars: array of Char; CharIndex: Integer): Integer; overload;
function GetChars(const Bytes: TBytes; ByteIndex, ByteCount: Integer;
const Chars: TCharArray; CharIndex: Integer): Integer; overload;

将一组字节解码为一组字符。

参数

Bytes 可以是字节指针或字节数组。

ByteIndex 指定要解码的第一个字节。如果不存在,则索引为 0。

ByteCount 指定要解码的字节数。如果不存在,则所有字节都将被解码。

Chars 指向解码字符目的地的指针。

CharIndex 指定 Chars 中开始写入结果的位置。

返回值

解码后的字符数组或解码后的字符数

System.SysUtils.WordRec

WordRec = packed record

将指定变量的高位和低位字节存储为 Byte 类型。主要用于类型转换。

参考

WideChar to Bytes

Combine two Bytes to WideChar

标签:function,const,AnsiChar,delphi,bys,WideChar,Integer,Byte
From: https://www.cnblogs.com/txgh/p/18030880

相关文章

  • delphi10.3农历日历控件安装使用
    控件下载,链接: https://pan.baidu.com/s/1-ZJFRMT2z5_kti0LX7bHCw提取码:2anv  Delphi10.3在File菜单下,选择”OPEN…”打开ChnCalendars.dpk文件    打开自带DemoD:\迅雷下载\ChnCalendar3.0Beta20......
  • delphi7农历日历控件安装使用。
    链接:https://pan.baidu.com/s/1-ZJFRMT2z5_kti0LX7bHCw提取码:2anv  Delphi7在File菜单下,选择”OPEN…”打开ChnCalendars.dpk文件    ......
  • delphi 每年、月、周、日的开始与结束的时间
    delphi每年、月、周、日的开始与结束的时间2022-07-1911:00:00网络Delphi1900 本文整理自网络,侵删。StartOfAYear...StartOfTheYear...EndOfAYear...EndOfTheYear...每年、月、周、日的开始与结束的时间{参数是指定的年、月、周、日}DateUtils.Start......
  • Delphi 实现刘谦春晚魔术
    试试看programProject1;{$APPTYPECONSOLE}{$R*.res}usesSystem.SysUtils,System.Classes;varlist,removeElement:TStringList;i,NameCount,insertIndex,directCount,sexCount:Integer;tmp,element,hiddenEle1,hiddenEle2:String;procedur......
  • Delphi 实现刘谦春晚魔术
    看了博友的C#实现刘谦春晚魔术很好,改成了delphi版的。 1programProject1;23{$APPTYPECONSOLE}4{$R*.res}56uses7System.SysUtils,8System.Classes;910var11list,removeElement:TStringList;12i,NameCount,insertI......
  • delphi按键值对重组字符串
    问题背景:有一组基金代码串,原逻辑按基金代码单个调整为按父子基金代码组作为条件获取查询结果解决原理:采用TStringList类哈希表操作方式重组字符串List:=TStringList.Create;List.Add('aaa=111');List.Add('bbb=222');List.Add('ccc=333');List.Add('ddd=444');ShowMessag......
  • delphi base64的“坑”
    delphibase64的“坑”使用Delphi原生的Base64编码(System.NetEncoding单元),编码后的字符串每隔76个字符会增加一个回车换行(#13#10),这样就导致和其他语言对接的时候出现问题,特别是Base64以后再进行签名,例如MD5签名,就会导致签名不一致。回车换行不容易看到,所以查找问题比较困难。......
  • electron delphi winform wpf qt的对比
    Electron、Delphi、WinForms、WPF和Qt都是用于开发桌面应用程序的工具或框架,它们各自有一些独特的优点和适用场景。以下是对这些工具的简要对比:Electron:基于Web技术(HTML、CSS和JavaScript)的跨平台桌面应用程序开发框架。使用Chromium渲染引擎提供强大的页面渲染能力。适用......
  • Delphi 12 Patch1
    如果你升级到Delphi12,这个补丁是必须打的。官方也发布了ISO版本,如这个需要重新安装。https://altd.embarcadero.com/download/radstudio/12.0/radstudio_12_0_inline_116924a.isoQuality Portal Issues Addresses by This Patch (notice QP remains accessible in r......
  • delphi 主窗体的 生命周期,如何 自己管理 而不是 自动管理
    在Delphi中,窗体的生命周期通常是由VCL(VisualComponentLibrary)自动管理的。但是,你可以通过一些手段来自己管理主窗体的生命周期,而不是完全依赖于自动管理。要自己管理主窗体的生命周期,你可以考虑以下几个方面:创建窗体:你可以手动创建窗体实例,而不是依赖于Application.Cre......