//在 delphi 新版中, char 已经是双字节了。故应该重新自己写一个函数,取名为 FillByte ,才无歧义。
procedure TForm1.Button2Click(Sender: TObject);
// 功能,将 Buff 数组快速填充为一个值,如 65
constMaxLen = 1024;
varBuff: array [0 .. MaxLen] of byte;p: PByte;i: integer;
beginp := @Buff[0];// 1 . 初学者写法。for i := 0 to MaxLen dobeginBuff[i] := 65; // 如果 Buff 是 delphi 的 string 类型// 则 Buff[i] 会有一个定位元素的函数调用,代码效率降低了。end;// 2. 进阶者写法,也可以称之为明白人写法。// 此写法清晰明白地使用了指针,是常用的方法。// 即使 Buff 为 delphi 的 string 类型,仍然高效。for i := 0 to MaxLen dobeginp^ := 65;inc(p);end;// 3. 怪异用法,这是语法特性, c 语言中也有这样的写法// 可以少写代码,省事。效率与方法2相当。for i := 0 to MaxLen dop[i] := 65;end;procedure TForm1.Button1Click(Sender: TObject);
// 功能,将 Buff 数组快速填充为某一个值,如 65 (16 进制0x41 )
constMaxLen = 1024;
varBuff: array [0 .. MaxLen] of byte;PB: PByte;PI: PInt64;D: int64;i, Count: integer;
begin// 方法4,高级用法。// 充分利用寄存器的长度,一次填充8个 Byte// 此写法综合评比最优写法。既高效,又灵活跨越各平台。PB := @Buff[0];PI := PInt64(PB);D := $4141414141414141; //Count := (MaxLen + 1) div 8;for i := 0 to Count - 1 dobeginPI^ := D;inc(PI);end;// 填充剩余的位置Count := (MaxLen + 1) and $7; // 等同于 MaxLen mod $7;PB := PByte(PI);for i := 0 to Count - 1 dobeginPB^ := $41;inc(PB);end;end;procedure TForm1.Button3Click(Sender: TObject);
// 功能,将 Buff 数组快速填充为某一个值,如 65 (16 进制 0x41 )
constMaxLen = 1024;
varBuff: array [0 .. MaxLen] of byte;p: pointer;i, Count: integer;
begin// 方法5 ,骨灰级写法// 惊天地,泣鬼神,为了效率,啥也不顾了。// 此为宇宙中效率最高写法,可惜,跨平台或有困难。Count := (MaxLen + 1) div 4;p := @Buff[0];asmcld;mov eax,$41414141; // 因为是32位,所以4个字节mov ecx,count;mov edi,p;rep stosd;end;Count := (MaxLen + 1) mod 4;if Count > 0 thenasmcldmov eax,$41;mov ecx,count;mov edi,p;rep stosb;end;
end;

  

转载于:https://www.cnblogs.com/lackey/p/6731582.html

dephi FillChar 的几种写法相关推荐

  1. Javascript闭包和闭包的几种写法及用途

    好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途.  一.什么 ...

  2. JavaScript 立即执行函数的两种写法

    (function(str){console.log(str+'欢迎你~');})('行步至春深');(function(str) {console.log(str+'欢迎你~');}('行路易知难' ...

  3. WindowsServer2012史记7-茴香豆的五种写法和四种”显示计算机”的方法

    消失的"计算机"? [这周九叔工作比较忙,还有其他琐事缠身,因此SystemCenter2012SP1系列的发布稍慢,抱歉了各位.] 众所周知,WindowsServer2012和 ...

  4. Android代码规范----按钮单击事件的四种写法

    [前言] 按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类. 按钮多的时候一般选择第四种写法. 一.第一种写法:在XML文件中声明onClick属性(很少用) 在XM ...

  5. php编写星期几,PHP实现今天是星期几的几种写法

    复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; ...

  6. 全面理解Javascript闭包和闭包的几种写法及用途【转】

    一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  7. Android按钮事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的例子. 目录结构还是引用上篇blog的截图. 具体实现代码: public class MainActivity extends Activity ...

  8. 全面理解Javascript闭包和闭包的几种写法及用途

     一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...

  9. SWT事件的四种写法

    一.匿名内部类写法     在创建SWT中的HelloWorld插件项目中就是用的这种写法,再次复制如下: button.addSelectionListener(new SelectionAdapt ...

最新文章

  1. 【CVPR 2020】CVPR2020 最新论文下载!看计算机视觉2020在研究什么?
  2. ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)A ASCII Area
  3. 怎么用python编程实现二次差值多项式_二次插值法python实现
  4. python画一颗心_利用python画一颗心的方法示例
  5. 微软在Build 2019大会上发布Fluid Framework协作平台
  6. 由于开发者通过接口修改了菜单配置_开发者说:Seata 0.7.0 版本,你 get 'Metrics' 技能了吗?...
  7. java当中用UDP实现相互交流
  8. python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片
  9. 使用游标正确提取SQL Server数据并将其放置在Reporting Services矩阵中
  10. 京东物流首架全货机首航 久未露面的刘强东还发声推广
  11. php 二进制 保存文件,PHP打开一个二进制文件,修改了内容如何再保存回去呢?...
  12. GCN图卷积网络简单实现
  13. Delphi源码网站
  14. fragstats教程
  15. 技术人生:恶补基础知识
  16. 如何提高计算机打字,如何练电脑打字速度,教你如何科学提高打字速度
  17. 个人开发作品分享:iTab新标签页
  18. 论文阅读-AKS_CoRR_2011
  19. 删除Skypee顽固病毒(AutoIt3木马)
  20. Kernel Panic 介绍

热门文章

  1. ESSENTIAL C++
  2. 开发框架:IOE 架构
  3. TimeZoneInfo
  4. h5 input,textarea属性placeholder样式修改
  5. CF #536div2E(dp)
  6. GCN图卷积网络 | 介绍
  7. centos7.6详细安装教程(VMware15.1.0)
  8. 详细介绍C语言指针(九千字完结篇)
  9. 【C语言航路】第一站:初识C语言(二)
  10. 跨国药企在中国 | BioNTech、阿斯利康、富士医疗、卫材等公司新动态