文档章节

反转内存的函数

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 256
阅读 1
收藏 0

//按单字节反转内存的函数
procedure ReverseMemory(P: PByte; Len: Integer); overload;
var
  B: Byte;
  P2: PByte;
begin
  P2 := P;
  Inc(P2, Len - 1);
  while Integer(P) < Integer(P2) do
  begin
    B := P^;
    P^ := P2^;
    P2^ := B;
    Inc(P);
    Dec(P2);
  end;
end;

//按双字节反转内存的函数
procedure ReverseMemory(P: PWord; Len: Integer); overload;
var
  W: Word;
  P2: PWord;
begin
  P2 := P;
  Inc(P2, Len div 2 - 1);
  while Integer(P) < Integer(P2) do
  begin
    W := P^;
    P^ := P2^;
    P2^ := W;
    Inc(P);
    Dec(P2);
  end;
end;

//按四字节反转内存的函数
procedure ReverseMemory(P: PInteger; Len: Integer); overload;
var
  I: Integer;
  P2: PInteger;
begin
  P2 := P;
  Inc(P2, Len div 4 - 1);
  while Integer(P) < Integer(P2) do
  begin
    I := P^;
    P^ := P2^;
    P2^ := I;
    Inc(P);
    Dec(P2);
  end;
end;

//调用测试
procedure TForm1.Button1Click(Sender: TObject);
var
  bs: TBytes;
  i: Integer;
begin
  SetLength(bs, 8);
  for i := 0 to Length(bs) - 1 do bs[i] := i + 49;
  ShowMessage(StringOf(bs)); {12345678}

  for i := 0 to Length(bs) - 1 do bs[i] := i + 49;
  ReverseMemory(PByte(bs), Length(bs));
  ShowMessage(StringOf(bs)); {87654321}

  for i := 0 to Length(bs) - 1 do bs[i] := i + 49;
  ReverseMemory(PWord(bs), Length(bs));
  ShowMessage(StringOf(bs)); {78563412}

  for i := 0 to Length(bs) - 1 do bs[i] := i + 49;
  ReverseMemory(PInteger(bs), Length(bs));
  ShowMessage(StringOf(bs)); {56781234}
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/11/12/1601955.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
快速语言学习简明要点草稿(编程语言学习的经典方式)

输入 输入字符型 输入数值型 输出日期型 输出 输出字符型 输出数值型 输出日期型 数据类型 字符 整型 长整型 浮点型 双精度 结构 联合 日期类型 金额类型 类 枚举 静态 指针 数组 列表 哈希 ...

OrionBox
2012/06/05
0
0
OpenGL超级宝典笔记——操作像素

OpenGL支持放大,缩小,旋转图像。下面将举例介绍这些像素的操作。下面的例子是从tga文件中读取图片并显示,而且可以通过右键菜单来选择图像的显示模式和保存图片的快照到磁盘命名为screens...

Mario_Q
2013/11/06
0
0
Redis源码分析(adlist)

源码版本: 源码位置: adlist.h : 数据结构定义。 adlist.c:函数功能实现。 一、adlist简介 Redis中的链表叫(A generic doubly linked list implementation 一个通用的双端链表实现),和普...

yangbodong22011
2017/11/08
0
0
HBase的rowkey的设计原则

HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位。 HBase中rowkey可以唯一标识一行...

为了美好的明天
2018/04/18
0
0
1-STM32嵌入LUA开发(控制小灯闪耀)

今天因为想让STM32完美的处理字符串,所以就想着让STM32嵌入lua,本来想用f103c8t6,但是一编译就提示内存不足...... 所以单片机的型号选择的 我下载到了RBT6的芯片上测试的 先说一下最终实现的...

杨奉武
2018/07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

产品分析感悟

我终于写完了我的第一份产品分析,按理说,内心应该很高兴才对,但是并没有,我此刻心情很沉重。 好吧,我全交代。。。 在这写篇文章之前,我仿佛打了鸡血般,以为自己打开了新的知识大门,我...

铸剑为犁413
19分钟前
1
0
如何使用less实现随机下雪动画详解

冬天来了,设计师说摇摇乐的场景需要随机下落的雪花动画,第一时间就想到的方法是canvas比较好,项目非常紧急,然而小程序对canvas支持不够友好,容易在项目中出现无法预估的兼容性问题 ,马...

前端小攻略
25分钟前
0
0
一个程序员的成长之路(转)

转自全民直播CTO张云龙讲述的一个程序员的成长之路,觉得有一定的借鉴性,分享一下。 https://github.com/fouber/blog/issues/41

酷沃
25分钟前
2
0
https

进入阿里云域名后台,修改DNS为阿里云官方DNS(默认为官方),然后点击“免费开启SSL证书” 点击“申请”、“验证”并等待签发 然后根据自己的服务器类型下载对应的证书 我使用的是lnmpa工具...

临江仙卜算子
52分钟前
0
0
Quartz监听器Listerner

概述 Quartz的监听器用于当任务调度中你所关注事件发生时,能够及时获取这一事件的通知。Quartz监听器主要有JobListener、TriggerListener、SchedulerListener三种,顾名思义,分别表示任务、...

大笨象会跳舞吧
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部