将11位十六进制值转换为带符号的32位int

时间:2014-03-07 18:01:39

标签: c# casting int hex

我得到一个11位有符号十六进制值,必须存储在int32数据类型中。当我将十六进制值转换为int 32时,11位十六进制值明显小于int32,因此它将填充更高位的位。

基本上我需要能够在给定的11位十六进制值的int32或16中存储11位有符号值。

例如。 字符串十六进制= 0x7FF;

如果我使用Int.parse(hex,System.Globalization.Numbers.Hexvalue)将其转换为int32; 我得到2047时它应该是-1(根据11位二进制111 1111)

如何在c#中完成此操作?

2 个答案:

答案 0 :(得分:1)

string hex = "0x7FF";
var i = (Convert.ToInt32(hex, 16) << 21) >> 21;

答案 1 :(得分:1)

实际上非常简单,只需两个班次。向右移动保持标志,这是有用的。为了使用它,11位的符号必须与int的符号对齐:

x <<= -11;

然后做正确的转变:

x >>= -11;

就是这样。

-11,可能看起来很奇怪,只是写一个32 - 11的较短方式。这通常不是同样的事情,但是移位计数被掩盖了31(int)或63(longs),所以在这里如果您可以使用该快捷方式。