[英]Is there an easy way to convert from 32bit integer to 16bit integer?
我有一个32位的int,我只想解决这个变量的下半部分。 我知道我可以转换为位数组和int16,但还有更直接的方法吗?
你只想要下半部分,你可以把它投出: (Int16)my32BitInt
通常,如果您正在扩展/截断这样的位模式,那么您需要注意签名类型 - 无符号类型可能会导致更少的意外。
正如评论中所提到的 - 如果您已将代码包含在“已检查”上下文中,或者更改了编译器选项以使默认值为“已检查”,那么您不能截断这样的数字而不会抛出异常,如果有任何非零位被丢弃 - 在这种情况下你需要这样做:
(UInt16)(my32BitInt & 0xffff)
(在这种情况下,使用带符号类型的选项已经消失,因为你必须使用& 0x7fff
然后只保留15位)
只需使用此功能
Convert.ToInt16()
要不就
(Int16)valueasint
你可以使用Int16
隐式对话 ;
(Int16)2;
但是当你这样做时要小心。 因为Int16
无法保存所有可能的Int32
值。
例如,这不起作用;
(Int16)2147483683;
因为Int16
可以保持32787
作为最大值。 您可以使用unchecked (C# Reference)
关键字这样的情况。
如果强制执行未经检查的操作,则应该使用强制转换:
int r = 0xF000001;
short trimmed = unchecked((short) r);
这将截断r
的值以适应短。
如果r
的值总是适合short
,你可以只进行正常的转换并抛出异常。
好吧,首先,确保您确实希望签署该值。 uint
和ushort
是有原因的。 然后:
ushort ret = (ushort)(val & ((1 << 16) - 1));
如果你需要一个16位的值,并且你碰巧知道一些特定的东西,那么这个数字永远不会小于零,你可以使用UINT16值。 转换看起来像:
int x = 0;
UInt16 value = (UInt16)x;
这具有整数的完整(正)范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.