2011-11-27 27 views
5

我不知道該怎麼稱呼它,這使得使用Google搜索更困難。整數轉換爲給定位數的字節

我有一個整數,比如說3,並且想要將它轉換爲11100000,也就是說,一個字節的整數值設置位數,從最重要的位開始。

我想這可能與做:

byte result = 0; 
for(int i = 8; i > 8 - 3; i--) 
    result += 2^i; 

,但有什麼更快/更漂亮,或最好,包含在.NET標準庫?

+0

如果您的整數大於8,該怎麼辦? –

+6

只是一個小點^是一個獨家或在C#不是電力運營商。 –

+0

@Martin哈哈謝謝,剛纔我花了幾秒鐘才意識到。如果您在編程時也碰巧爲紙張編寫方程式,有時很容易忘記。 – Max

回答

11
int n = 3; // 0..8 
int mask = 0xFF00; 
byte result = (byte) (mask >> n); 
+0

+1,非常好。演員是否絕對必要? – Cameron

+0

n> 8呢? –

+0

@Cameron,是的,因爲'mask >> n'的結果是int' –

5

因爲只有幾種可能性,你可以只緩存它們:

// Each index adds another bit from the left, e.g. resultCache[3] == 11100000. 
byte[] resultCache = { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0XF8, 0xFC, 0xFE, 0xFF }; 

你還希望得到一個異常,而不是一種無聲的錯誤,如果你不小心得到n的值> 8.

+0

+1安慰獎爲指出一種簡單而有效的方法來解決很多這些類型的問題(查表),這些問題很容易被忽略,而且所有程序員都應該在他們的技巧框架中使用。 (在這種情況下,它不像Henk那樣好解決方案) –

+0

@JasonWilliams謝謝。在發佈這個選擇之前,我投了Henk的優雅解決方案:-)。 –