Delphi:如何从TBytes读取X位?

Max*_*xim 1 delphi byte bit-manipulation bytearray

我遇到了从TBytes读取随机位数的问题.首先,我遵循了这个问题的建议(关于使用ubitstream.pas单元的答案):在Delphi中处理任意位长数据? 我的例子:binaryfeed(TBytes)=(255,0,0,0,0,0,11,1,112,128,128,130,81);

  1. 我读了8位并得到了255 - 好的.位置是8.
  2. 我读了另外24位并得到0 - 确定.位置是32.
  3. 我读了另外24位并得到393216而不是6.位置是56.

393216是0000 0000 0000 0110 0000 0000 0000 0000

我可以理解它为什么会发生,但我无法弄清楚如何截断这些额外的零位.有任何想法吗?

Dav*_*nan 7

问题是字节顺序.

00000110 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

是393216.反转三个字节,你有

00000000 00000000 00000110 
Run Code Online (Sandbox Code Playgroud)

这是6.

您使用的代码是小端,但您希望大端的行为.您需要更改代码以解决此不匹配问题.

从我们在问题中看到的,你总是读取整个字节,因此不需要你使用的代码的复杂性.您可以在字节级别操作.显然你仍然需要正确地考虑字节序,但这不是很具挑战性.