C#学习教程:在C#中转换为字节分享


在C#中转换为字节

可能重复:
在C#中从short转换为byte时会发生什么?

有人可以解释在将值转换为字节时发生的情况,如果它超出最小/最大字节的范围吗? 它似乎取整数值并用255模数。我试图理解为什么这不会抛出exception的原因。

int i = 5000; byte b = (byte)i; Console.WriteLine(b); // outputs 136 

5000表示为4个字节(int)(hex)

| 00 | 00 | 13 | 88 |

现在,当您将其转换为字节时,它只需要最后1个字节。

原因:在IL级别,将使用conv.u1运算符,如果将int转换为byte,则会截断高位。 (请参阅conv.u1文档中的备注部分)。

| 88 |

十进制表示为136

发生了什么事情是系统正在丢弃最重要的字节以使其适合。 看看这个StackOverFlow答案 ,可以很好地解释发生了什么。

我试图理解为什么这不会引发exception的原因。

因为溢出检查的默认设置已关闭

试试这个,它会抛出:

 checked { int i = 5000; byte b = (byte)i; Console.WriteLine(b); } 

简短forms是:

 int i = 5000; byte b = checked ( (byte)i ); Console.WriteLine(b); 

你得到5000%256 = 136 ,就像总是满满的一样。

它也在MSDN中解释。 如果发生溢出,请使用checked()抛出exception。 另请阅读: MSDN:第5章:有关变量的更多信息

上述就是C#学习教程:在C#中转换为字节分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959837.html

发表评论

邮箱地址不会被公开。 必填项已用*标注