我需要将一个数字从255基数转换为256

时间:2011-04-15 18:31:56

标签: delphi

我有一个文件,其中包含存储在255中的数字。因此,我需要将一个数字从基数255转换为基数256.该数字是基数。

提示:Base 255表示每个字节包含0到254之间的数字,而不是0到255之间的数字,如果数字为“normal”(基数为256),则会发生。


有没有任何低级别的例程(如位旋转)?

2 个答案:

答案 0 :(得分:3)

你有4个字节,每个字节在255,即。 “几乎是一个字节”。

要计算总和,请执行以下操作:

sum = b1 + (b2 + (b3 + b4 * 255) * 255) * 255

您必须决定b1是最左边还是最右边的字节,具体取决于值的字节顺序。

您可以像这样重写上述内容,以便更容易理解:

sum  = b1
sum += b2 * 255
sum += b3 * 255 * 255
sum += b4 * 255 * 255 * 255

答案 1 :(得分:3)

如果我说得对,你需要这样的东西(我使用Delphi 2009+退出语法):

function GetLongWord255(Source: LongWord; var Target: LongWord): Boolean;
var
  B: Byte;

begin
  B:= Byte(Source shr 24);
  if B = 255 then Exit(False);
  Target:= B;
  B:= Byte(Source shr 16);
  if B = 255 then Exit(False);
  Target:= Target * 255 + B;
  B:= Byte(Source shr 8);
  if B = 255 then Exit(False);
  Target:= Target * 255 + B;
  B:= Byte(Source);
  if B = 255 then Exit(False);
  Target:= Target * 255 + B;
  Exit(True);
end;

对于低级技巧,你可以使用

Target * 255 = Target shl 8 - Target;

虽然我不确定你能从中获益。 :)