2011-11-27 60 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的优雅解决方案:-)。 –