繁体   English   中英

有没有一种从32位整数转换为16位整数的简单方法?

[英]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 ,你可以只进行正常的转换并抛出异常。

好吧,首先,确保您确实希望签署该值。 uintushort是有原因的。 然后:

ushort ret = (ushort)(val & ((1 << 16) - 1));

如果你需要一个16位的值,并且你碰巧知道一些特定的东西,那么这个数字永远不会小于零,你可以使用UINT16值。 转换看起来像:

 int x = 0;
 UInt16 value = (UInt16)x;

这具有整数的完整(正)范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM