F0 7D 00 C8 00 - > 11110000 01111101 00000000 11001000 00000000
前4位1111 = 15表示,接下来的30位用于存储2个值,每个15位, a = 000001111101000 = 1000,b = 000001100100000 = 800(有符号位值)
1111000001111101000000001100100000与'000000'匹配,因此它将是5个字节。
如何使这样的delphi程序改变值a& B,
procedure setBit(a,b:Integer);
答案 0 :(得分:1)
我猜您使用的是LSB存储顺序。
试试这个:
procedure SetBit(const a,b: cardinal; var dest);
var d: Int64 absolute dest;
begin
d := $F000000000+(Int64(a) shl 21)+b shl 6;
end;
它将改变dest指向的8字节值,将数据存储到前5个字节中。
答案 1 :(得分:1)
设置位的最简单方法是使用汇编程序指令BTS。类似的东西(未经测试)
procedure SetBit(var L; bit: Longint);
asm
BTS [EAX], EDX
end;