我有一个文件,其中包含存储在255中的数字。因此,我需要将一个数字从基数255转换为基数256.该数字是基数。
提示:Base 255表示每个字节包含0到254之间的数字,而不是0到255之间的数字,如果数字为“normal”(基数为256),则会发生。
有没有任何低级别的例程(如位旋转)?
答案 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;
虽然我不确定你能从中获益。 :)