2011-04-15 27 views
3

我有一個文件,其中包含以基數255存儲的數字。所以,我需要將數字從基數255轉換爲基數256.數字是基數。我需要將數字從基數255轉換爲基數256

提示:基數255表示每個字節包含0到254之間的數字,而不是0到255,如果數字爲'normal'(基數256),則會發生這種情況。


有這樣做的任何低級別的例程(如位旋轉)?

+3

我真的不知道這個問題......這聽起來像你正在使用一個位置系統與255位數字(0-9,AZ,???),並希望將這樣的數字轉換爲另一個系統256位數字... – 2011-04-15 18:34:24

+0

嗨安德烈亞斯。請看我更新的問題。 – Ampere 2011-04-15 18:42:35

+2

@Altar:對不起 - 我還是不明白。在我的世界裏,一個字節總是表示256個不同的數字中的任何一個0,1,2,...,255. – 2011-04-15 18:45:30

回答

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; 

,雖然我不知道,你可以通過它獲得。 :)

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

我的問題是,這不應該是你的基本數學。總結基數N中寫出的任何數字,你可以用任何N替換上面的255,例如... 10. – 2011-04-15 19:11:16

+0

我只是希望有一個專門的函數(比如那些位級操作符)來做到這一點,所以它贏了不涉及太多的計算。我在發佈後約15分鐘更新了該帖子,以更好地反映我的問題。但是,正如大衛所說,這確實很奇怪,所以我猜想英特爾沒有打算實現低級功能來做到這一點。 – Ampere 2011-04-15 19:39:51

+1

結果:= Result + BitValue *(Base^BitPosition)其中LSB的BitPosition = 0。 – 2011-04-15 19:43:10