如何在c#中将usshort转换为short ?
本文关键字:转换 short usshort 中将 | 更新日期: 2023-09-27 18:05:03
一个版本是
short value = unchecked((short)0x8010);
像下面这样的其他版本将不能工作,并且会抛出异常
short value = Convert.ToInt16(0x8010);
short value = (short)(0x8010);
有没有其他没有未检查关键字的版本?
已更新:期望是-32752的负值
你期望value
是什么?
0x8010 = 32784
短值的取值范围是-32768 ~ 32767,所以32784不能用短值表示。存储为0x8010的短值将被解释为一个负数。是你想要的那个负数吗?
根据c#的另一个SO问题,十六进制表示法和有符号整数,unsafe
关键字必须在c#中使用,如果你想要它被解释为一个负数。
下面将工作转换所有适合short
的ushort
值,并替换所有不适合short.MaxValue
的值。这是有损转换。
ushort source = ...;
short value = source > (ushort)short.MaxValue
? short.MaxValue
: (short)source;
如果您正在寻找直接位转换,您可以执行以下操作(但我不推荐)
[StructLayout(LayoutKind.Explicit)]
struct EvilConverter
{
[FieldOffset(0)] short ShortValue;
[FieldOffset(0)] ushort UShortValue;
public static short Convert(ushort source)
{
var converter = new EvilConverter();
converter.UShortValue = source;
return converter.ShortValue;
}
}
我建议:
ushort input;
short output;
output = short.Parse(input.ToString("X"), NumberStyles.HexNumber));