有4个字节类型的值,用移位或逻辑运算符怎么合成一个整数?
比如 $FFEEDDCC。

$FF
$EE
$DD
$CC


//方法 1: 共用内存procedure TForm1.Button1Click(Sender: TObject);
var
bf: record b1,b2,b3,b4: Byte end; i: Integer absolute bf;
begin
bf.b1 := $CC; bf.b2 := $DD; bf.b3 := $EE; bf.b4 := $FF; ShowMessageFmt('%x', [i]); //FFEEDDCC
end;
//方法 2: 位运算procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
i := $CC or ($DD shl 8) or ($EE shl 16) or ($FF shl 24);//不用括号也可
ShowMessageFmt('%x', [i]); //FFEEDDCC
end;
//方法 3: 使用函数procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer;
begin
i := MakeLong(MakeWord($CC,$DD),
MakeWord($EE,$FF)); ShowMessageFmt('%x', [i]); //FFEEDDCCend;
//方法 4: 从静态数组...procedure TForm1.Button4Click(Sender: TObject);
var
bs: array[0..3] of Byte; P: PInteger;
begin
bs[0] := $CC; bs[1] := $DD; bs[2] := $EE; bs[3] := $FF; P := @bs; ShowMessageFmt('%x', [P^]); //FFEEDDCC
end;
//方法 5: 从动态数组...procedure TForm1.Button5Click(Sender: TObject);
var
bs: array of Byte; P: PInteger;
begin
SetLength(bs, 4); bs[0] := $CC; bs[1] := $DD; bs[2] := $EE; bs[3] := $FF; P := @bs[0]; ShowMessageFmt('%x', [P^]); //FFEEDDC
Cend;
-------------------------------------------------------------------------------
1.可以直接Copymemory或者Move
2.可以用变体类型的结构体.
type
   TWordOfInt = array[0..2-1] of WORD;
   TByteOfInt = array[0..4-1] of Byte;
   TIntRec = packed record //定义一个辅助类型,这样转换非常快,而且方便
     case Integer of
       0: (IntValue: Integer);
       1: (Low, High: Word);
       2: (Words: TWordOfInt);
       3: (Bytes: TByteOfInt);
   end;

//方法一,借助TIntRec,来转换
var
   Int : Integer;
   Bytes : TByteOfInt;
begin
   int := 100;

Bytes := TIntRec(int).Bytes;//integer转字节数组
   Int :=  TIntRec(Bytes).IntValue; //Byte数组转Integer

end;

//方法二, 直接用TIntRec,不转换.根本不耗费一点点CPU的时间
var
   value : TIntRec;
begin
   value.IntValue := 100; //看成Integer
   //下面是看成Byte数组用
   value.Bytes[0] := 1;
   value.Bytes[1] := 1;
   value.Bytes[2] := 1;
   value.Bytes[3] := 1;
end;

delphi中将 4 个 Byte 合成 1 个 Integer 的五种方法的更多相关文章

  1. ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)

    http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html 在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送 ...

  2. delphi中将一个ADOQuery查询的数据结果传递给一个动态生成的ADOQuery

    delphi中将一个ADOQuery查询的数据结果传递给一个动态生成的ADOQuery 2010-03-10 17:35 方法一: beginADOQuery:=TADOQuery.Create(Ap ...

  3. 2015.1.25 Delphi打开网址链接的几种方法

    Delphi打开网址链接的几种方法1.使用shellapi打开系统中默认的浏览器              首先需在头部引用 shellapi单元即在uses中添加shellapi,这里我们需要知道有 ...

  4. Delphi中弹出提示框的四种方法

    参考:http://blog.itpub.net/8432156/viewspace-924843/ 更为详细的内容请参见:http://blog.csdn.net/akof1314/article/ ...

  5. 【转】delphi程序只允许运行一个实例的三种方法:

    一.        创建互斥对象 在工程project1.dpr中创建互斥对象 Program project1 Uses Windows,Form, FrmMain in 'FrmMain.pas' ...

  6. [转]Delphi调用cmd的两种方法

    delphi调用cmd的两种方法vars:string;begins:='cmd.exe /c '+edit1.Text+' >c:\1.txt';winexec(pchar(s),sw_hid ...

  7. Delphi Windows API判断文件共享锁定状态(OpenFile和CreateFile两种方法)

    一.概述 锁是操作系统为实现数据共享而提供的一种安全机制,它使得不同的应用程序,不同的计算机之间可以安全有效地共享和交换数据.要保证安全有效地操作共享数据,必须在相应的操作前判断锁的类型,然后才能确定 ...

  8. 让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)

    Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许多个资源管理器进行文件的移动复制操作.但有时出于某种考虑(比如安全性),我们要 ...

  9. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)

    Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...

随机推荐

  1. 【Longest Substring Without Repeating Characters】cpp

    题目: Given a string, find the length of the longest substring without repeating characters. For examp ...

  2. leetcode 【 Rotate Image 】python 实现

    题目: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwis ...

  3. error C2011: “Picture”:“struct”类型重定义

    今天引用外来库时出现问题,也许是版本问题. 错误如下: .....\oursun\cincludes\quickdraw.h(309): error C2011: “Picture”:“struct” ...

  4. windows下使用grunt

    grunt官网:http://www.gruntjs.org/ 一.安装grunt 先安装node,在http://www.nodejs.org/可以下载安装包直接安装.在命令行下运行: npm in ...

  5. Leetcode 630.课程表III

    课程表III 这里有 n 门不同的在线课程,他们按从 1 到 n 编号.每一门课程有一定的持续上课时间(课程时间)t 以及关闭时间第 d 天.一门课要持续学习 t 天直到第 d天时要完成,你将会从第 ...

  6. alpha(4/10)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:冲刺4 团队部分 后敬甲 过去两天完成了哪些任务 文字描述 主页部分图标的替换 -拍照按钮的设计和测试 GitHub代码 ...

  7. 【转】Unity3D研究院之两种方式播放游戏视频

    http://www.xuanyusong.com/archives/1019   Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像 ...

  8. UNet简单案例讲解

    1.创建文件夹: 2.创建一个空物体,添加如下组件: Network Manager(网络管理组件): Network Manager HUD(提供一个UI): 3.创建如下模型,并设置为预制体: 给 ...

  9. top/free/df/jstack/jmap

    上面的输出,load average后面分别是1分钟.5分钟.15分钟的负载情况.数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的.如果这个数除以CPU 的数目,结果高于5的时候就表明系 ...

  10. phpstrom换行的一个小坑

    安装phpstrom后汉化会默认不是左边定格换行,而是会智能换行 苦找了许久了,终于知道在哪设置了,跟大家分享一下,希望不要走同样的坑 不勾选即可