加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何使用bit / bit-operator来控制对象状态?

发布时间:2020-12-15 09:48:42 所属栏目:大数据 来源:网络整理
导读:我想创建轻型对象数据包以在客户端和服务器应用程序之间传递. 这是一个如此简单的任务,我只能控制1个字节,所以 一个字节中的每个位都有不同的含义, 仅使用位 0 = False 1 = True Itens我现在需要: 1 - Loaded from database 2 - Persisted3 - Changed4 - Ma
我想创建轻型对象数据包以在客户端和服务器应用程序之间传递.

这是一个如此简单的任务,我只能控制1个字节,所以
一个字节中的每个位都有不同的含义,

仅使用位

0 = False 
1 = True

Itens我现在需要:

1 - Loaded from database 
2 - Persisted
3 - Changed
4 - Marked to Delete
5 -
6 - 
7 - Null Value 
8 - Read Only


1) How do I use bit operators in Delphi to check each bit value? 
2) How do I set the bit Values?

在所有帮助之后,我会使用下一个Set

TStateType = (
    stLoaded    = 0,// loaded from persistance
    stNative    = 2,// value loaded and converted to native type
    stPersisted = 3,// saved
    stChanged   = 4,// object or member changed
    stToDelete  = 5,// marked to delete
    stReadOnly  = 6,// read only object,will not allow changes
    stNull      = 7    // value is null
  );
  TState = Set of TStateType;

对于流 – >持久性,这将是使用的记录:

TDataPackage = record
    Data: TBytes;
    TypeInfo: TMetaInfo;
    State: Byte;
    Instance: TBuffer;
  end;

谢谢大家,感谢所有的答案和评论.

解决方法

我真的为此使用了一套.但是,我看到你真的想要一个字节.在任何地方使用集合,然后在最后将类型转换为一个字节.

Barry Kelly指出,这种解决方案需要更少的打字,支持标准的delphi操作符并且不会带来任何性能损失.

procedure Test;
type
  TSetValues = (
    TSetValue1   = 0,TSetValue2   = 1,TSetValue4   = 2,TSetValue8   = 3,TSetValue16  = 4,TSetValue32  = 5,TSetValue64  = 6,TSetValue128 = 7
  );

  TMySet = set of TSetValues;
var
  myValue: byte;
  mySet: TMySet;
begin
  mySet := [TSetValue2,TSetValue16,TSetValue128];
  myValue := byte(mySet);
  ShowMessage(IntToStr(myValue)); // <-- shows 146
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读