我得到一个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#中完成此操作?
答案 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),所以在这里如果您可以使用该快捷方式。