我不知道該怎麼稱呼它,這使得使用Google搜索更困難。整數轉換爲給定位數的字節
我有一個整數,比如說3
,並且想要將它轉換爲11100000
,也就是說,一個字節的整數值設置位數,從最重要的位開始。
我想這可能與做:
byte result = 0;
for(int i = 8; i > 8 - 3; i--)
result += 2^i;
,但有什麼更快/更漂亮,或最好,包含在.NET標準庫?
我不知道該怎麼稱呼它,這使得使用Google搜索更困難。整數轉換爲給定位數的字節
我有一個整數,比如說3
,並且想要將它轉換爲11100000
,也就是說,一個字節的整數值設置位數,從最重要的位開始。
我想這可能與做:
byte result = 0;
for(int i = 8; i > 8 - 3; i--)
result += 2^i;
,但有什麼更快/更漂亮,或最好,包含在.NET標準庫?
int n = 3; // 0..8
int mask = 0xFF00;
byte result = (byte) (mask >> n);
因爲只有幾種可能性,你可以只緩存它們:
// 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.
+1安慰獎爲指出一種簡單而有效的方法來解決很多這些類型的問題(查表),這些問題很容易被忽略,而且所有程序員都應該在他們的技巧框架中使用。 (在這種情況下,它不像Henk那樣好解決方案) –
@JasonWilliams謝謝。在發佈這個選擇之前,我投了Henk的優雅解決方案:-)。 –
如果您的整數大於8,該怎麼辦? –
只是一個小點^是一個獨家或在C#不是電力運營商。 –
@Martin哈哈謝謝,剛纔我花了幾秒鐘才意識到。如果您在編程時也碰巧爲紙張編寫方程式,有時很容易忘記。 – Max