Delphi 如何从字节中选择一些位?
我想从字节中获取一些位,如下所示: 251 dec=11111 011箱 我想得到第3位直到第6位 我创建了一个函数:Delphi 如何从字节中选择一些位?,delphi,delphi-7,Delphi,Delphi 7,我想从字节中获取一些位,如下所示: 251 dec=11111 011箱 我想得到第3位直到第6位 我创建了一个函数: function ExtractBitsRL (value, bits_start, bits_len: Integer) : Integer; begin Result := ((value shr (bits_start - 1)) and ((1 shl bits_len) - 1)); end; 用法: b := ExtractBitsRL (251,3,3);
function ExtractBitsRL (value, bits_start, bits_len: Integer) : Integer;
begin
Result := ((value shr (bits_start - 1)) and ((1 shl bits_len) - 1));
end;
用法:
b := ExtractBitsRL (251,3,3);
结果是:110还可以
但是
176十二月=10110000箱
结果是:0000而不是1011
我找不到我的错误。(我正在使用Delphi 7)来使用您想要使用的计数模式
function ExtractBitsRL (value, bits_start, bits_len: Integer) : Integer;
begin
Result := ((value shr (9 - bits_start - bits_len )) and ((1 shl bits_len) - 1));
// would be 8 if you started at bit zero
end;
使用您想要使用的计数模式
function ExtractBitsRL (value, bits_start, bits_len: Integer) : Integer;
begin
Result := ((value shr (9 - bits_start - bits_len )) and ((1 shl bits_len) - 1));
// would be 8 if you started at bit zero
end;
您肯定使用了不寻常的基于一的计算,因此请看下表:
bit number 8 7 6 5 4 3 2 1
176 dec = 1 0 1 1 0 0 0 0
251 dec = 1 1 1 1 1 0 1 1
你的函数给出了正确的结果
但看起来你想象的是相反的位顺序。LSB是二进制记录中最右边的位。因此,要从176 dec
中提取1011
,需要参数5,4
请注意,在您的(反向)解释结果中,应该是
1101
,而不是1011
,您肯定使用了不寻常的基于一的计算,因此请查看下表:
bit number 8 7 6 5 4 3 2 1
176 dec = 1 0 1 1 0 0 0 0
251 dec = 1 1 1 1 1 0 1 1
你的函数给出了正确的结果
但看起来你想象的是相反的位顺序。LSB是二进制记录中最右边的位。因此,要从176 dec
中提取1011
,需要参数5,4
请注意,在您的(反向)解释结果中,应该是
1101
,而不是1011
,如何获取位1到位4?我想从中间获取位。我相信你给出了一个信号,因为我的函数是从右向左,而不是从左向右。你有0-3位。您需要位4-7,因此可能需要提取位srl(176,5,4)。您的代码显示(10110000 shr(1-1))和(00010000-1)=(10110000 shr 0)和(00001111)=10110000和00001111=0。@kobik,位通常从0开始枚举。@kobik,OP可能从1开始计数。(从左到右,嗯)如何得到比特1到4?我想从中间得到比特。我相信你给出了一个信号,因为我的函数是从右向左,而不是从左向右。你有0-3位。您需要位4-7,因此可能需要提取位srl(176,5,4)。您的代码显示(10110000 shr(1-1))和(00010000-1)=(10110000 shr 0)和(00001111)=10110000和00001111=0。@kobik,位通常从0开始枚举。@kobik,OP可能从1开始计数。(从左到右,嗯)我强烈建议使用通用规则。请注意,您的解释与位顺序相反,使用Dsm方法,您将得到1101
,而不是1011
,我强烈建议使用通用规则。请注意,您的解释与位顺序相反,使用Dsm方法,您将得到1101
,而不是1011