在C#中转换为字节

Ste*_*bbi 8 c# byte casting

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

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

int i = 5000;
byte b = (byte)i;

Console.WriteLine(b);  // outputs 136
Run Code Online (Sandbox Code Playgroud)

pra*_*nth 8

5000表示为4个字节(int)(十六进制)

| 00 | 00 | 13 | 88 |

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

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

| 88 |

十进制表示为136


Ice*_*ind 5

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