我不知道该怎么称呼它,这使得使用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