我有一個文件,其中包含以基數255存儲的數字。所以,我需要將數字從基數255轉換爲基數256.數字是基數。我需要將數字從基數255轉換爲基數256
提示:基數255表示每個字節包含0到254之間的數字,而不是0到255,如果數字爲'normal'(基數256),則會發生這種情況。
有這樣做的任何低級別的例程(如位旋轉)?
我有一個文件,其中包含以基數255存儲的數字。所以,我需要將數字從基數255轉換爲基數256.數字是基數。我需要將數字從基數255轉換爲基數256
提示:基數255表示每個字節包含0到254之間的數字,而不是0到255,如果數字爲'normal'(基數256),則會發生這種情況。
有這樣做的任何低級別的例程(如位旋轉)?
如果我得到你的權利,你需要這樣的事情(我用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;
,雖然我不知道,你可以通過它獲得。 :)
你有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
我的問題是,這不應該是你的基本數學。總結基數N中寫出的任何數字,你可以用任何N替換上面的255,例如... 10. – 2011-04-15 19:11:16
我只是希望有一個專門的函數(比如那些位級操作符)來做到這一點,所以它贏了不涉及太多的計算。我在發佈後約15分鐘更新了該帖子,以更好地反映我的問題。但是,正如大衛所說,這確實很奇怪,所以我猜想英特爾沒有打算實現低級功能來做到這一點。 – Ampere 2011-04-15 19:39:51
結果:= Result + BitValue *(Base^BitPosition)其中LSB的BitPosition = 0。 – 2011-04-15 19:43:10
我真的不知道這個問題......這聽起來像你正在使用一個位置系統與255位數字(0-9,AZ,???),並希望將這樣的數字轉換爲另一個系統256位數字... – 2011-04-15 18:34:24
嗨安德烈亞斯。請看我更新的問題。 – Ampere 2011-04-15 18:42:35
@Altar:對不起 - 我還是不明白。在我的世界裏,一個字節總是表示256個不同的數字中的任何一個0,1,2,...,255. – 2011-04-15 18:45:30