文档章节

反转内存的函数

涂孟超
 涂孟超
发布于 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
1-STM32嵌入LUA开发(控制小灯闪耀)

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

杨奉武
07/16
0
0
把一个字符串反转,单词不翻转

baidu PC端开发工程师的一道笔试题。 写一个函数,将字符串反转,反转方式如下:“I am a student”反转成“student a am I”,

习总
2012/10/29
4.1K
14

没有更多内容

加载失败,请刷新页面

加载更多

环境搭建之八-- 环境变量

sudo vim /etc/profile 在最下方追加: export JAVA_HOME=/usr/java/jdk1.7.0_80 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export MA......

imbiao
3分钟前
0
0
枚举案例二 BILL_TYPE_BJ("BILL_TYPE", "bj", "布机单"),

package yt.gk.woserviceapi.common; import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; import java.util.List; public enum ConstEnum { /** * 工单类型 */ BILL_TYPE......

泉天下
5分钟前
0
0
MySQL相关整理记录

如何查看MySQL的引擎情况? MySQL的不同的引擎对于事务的支持是不同的,InnoDB支持事务。 例如如下: show engines; show variables like '%storage_engine%'; 可参考: 如何查看mysql引擎相...

宸明
8分钟前
0
0
并发模型比较

Golang 的特色之一就是 goroutine ,使得程序员进行并发编程更加方便,适合用来进行服务器编程。作为后端开发工程师,有必要了解并发编程面临的场景和常见的解决方案。一般情况下,是怎样做高...

java知识分子
9分钟前
1
0
jenkins私库上进行web项目部署原理

1.jenkins私库上进行项目部署是外网进行部署 2.jenkins部署web项目时 admin和front 的项目 的代码 是从华为云/git库中拿过来. 3.而parent文件是公用的文件,在部署时都会以jar包的形式引用进行...

森火
9分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部