文档章节

反转内存的函数

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 256
阅读 1
收藏 0
点赞 0
评论 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
博文 2004
码字总数 14107
作品 0
深圳
程序员
快速语言学习简明要点草稿(编程语言学习的经典方式)

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

OrionBox ⋅ 2012/06/05 ⋅ 0

OpenGL超级宝典笔记——操作像素

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

Mario_Q ⋅ 2013/11/06 ⋅ 0

Redis源码分析(adlist)

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

yangbodong22011 ⋅ 2017/11/08 ⋅ 0

字符串反转,但单词不反转

题目:字符串反转,但是单词不反转,不能用内库函数但是可以用(strlen) demo:I am coder结果:coder am I 本来一个用库函数: ---------- 只能用最简单的算法1.那整体反转2.找到每一个单词...

macker ⋅ 2014/05/13 ⋅ 0

把一个字符串反转,单词不翻转

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

习总 ⋅ 2012/10/29 ⋅ 14

依赖注入/控制反转学习笔记

最近在学习js的开发框架比如AngularJS、Meteor、Backbone等,这些框架的一个特点就是依赖注入,因为一直对这个概念云山雾罩,所以特意花时间学习了一下,把学习笔记写在这里。 ------------...

路过暴风 ⋅ 2014/01/14 ⋅ 0

HBase的rowkey的设计原则

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

为了美好的明天 ⋅ 04/18 ⋅ 0

laravel 服务容器实现原理

前言 通过实现laravel 框架功能,以便深入理解laravel框架的先进思想。 什么是服务容器 服务容器是用来管理类依赖与运行依赖注入的工具。Laravel框架中就是使用服务容器来实现 控制反转 和 ...

技术小牛人 ⋅ 2017/11/14 ⋅ 0

Python自动化开发学习2

列表和元祖 列表取值和切片的演示: strings = ['a','b','c','d','e','f','g']print(strings[0]) # 从0开始计数,所以第一个元素是0print(strings[1:4]) # 切片,从起点开始,但是不包括终点...

骑士救兵 ⋅ 2017/10/31 ⋅ 0

Spring IoC & DI

IOC诞生的历史 在没有IoC时,关联不同模块是通过类实例实现的,代码可能是这样子的: 当YourServiceImpl的接口不变时,只需要根据业务需要更换不同的YourService实现类即可。一旦更换实现类时...

classfly ⋅ 06/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何使用serverchan微信推送告警

之前实现推送告警信息到微信的方法有如下几种: 1、通过企业公众号实现----收费: 2、通过QQ邮箱,在微信平台上开启收到邮件进行提醒; 3、第三方告警平台API,一般也是收费的; 不过最近看文...

问题终结者 ⋅ 23分钟前 ⋅ 0

TCP的RPC

RPC就是远程方法调用(Remote Process Call ),包含了客户端和服务端,涉及了对象的序列化传输。 1.服务端启动,注册远程调用的类2.客户端发送请求信息包含类、方法、参数的一些信息、序列化传...

Cobbage ⋅ 43分钟前 ⋅ 0

IOS-UI UI初步代码布局添加事件

ISO开发界面,UI是必须学习的一部分,其实很早之前想学来了,一直没有沉下心来学习。看到IOS的代码风格和布局就别扭的不行,跟java代码和android布局比较显得不是那么方便,所以一直到现在。...

京一 ⋅ 53分钟前 ⋅ 0

浅谈OpenDaylight的二次开发

OpenDaylight作为一款开源SDN网络控制器,依托于强大的社区支持以及功能特性,成为了目前主流的SDN网络控制器开发平台。在比较稳定的OpenDaylight Helium版本中,已经为开发者提供了大量的网...

wangxuwei ⋅ 今天 ⋅ 0

API 开发中可选择传递 token 接口遇到的一个坑

在做 API 开发时,不可避免会涉及到登录验证,我使用的是jwt-auth 在登录中会经常遇到一个token过期的问题,在config/jwt.php默认设置中,这个过期时间是一个小时,不过为了安全也可以设置更...

等月人 ⋅ 今天 ⋅ 0

Java NIO之文件处理

程序要操作本地操作系统的一个文件,可以分为以下三个部分: 对文件位置的操作 对文件的操作 对文件内容的操作 其中,对文件内容的操作在 Java NIO之Channel 中已经有了介绍,通过FileChann...

士别三日 ⋅ 今天 ⋅ 0

Maven的pom.xml配置文件详解

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.......

小海bug ⋅ 今天 ⋅ 0

解决httpclient超时设置不生效的问题

最近公司有项目需要通过http调用第三方服务,且第三方服务偶有超时,故需要设置一定的超时时间防止不响应的情况出现。 初始设置如下: [java] view plain copy //超时设置 RequestConfig re...

Mr_Tea伯奕 ⋅ 今天 ⋅ 0

过滤器Filter和拦截器HandlerInterceptor

过滤器 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要...

hutaishi ⋅ 今天 ⋅ 0

Redis入门详解(转)

Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis应用场景 Redis总结 Redis简介: Redi...

xiaoyaoyoufang ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部