如果我没有正确理解,您的问题是如何转换输入,这实际上是 a signed-byte
( sbyte ),但该输入存储在 aunsigned integer
中,然后通过将它们转换为零来避免负值。
需要明确的是,当您使用有符号类型(如ubyte
)时,框架在Two's complement
幕后使用,因此只需转换为正确的类型,您将使用二进制补码。
if
然后,一旦完成转换,就可以使用简单或条件三元运算符 ( ? :) 来限制负值。
下面介绍的函数将返回0
值from 128 to 255
(或从 -128 到 -1)和the same value
值from 0 to 127
。
所以,如果你必须使用无符号整数作为输入和输出,你可以使用这样的东西:
private static uint ConvertSByteToByte(uint input)
{
sbyte properDataType = (sbyte)input; //128..255 will be taken as -128..-1
if (properDataType < 0) { return 0; } //when negative just return 0
if (input > 255) { return 0; } //just in case as uint can be greater than 255
return input;
}
或者,恕我直言,您可以将输入和输出更改为最适合您的输入和输出的数据类型(sbyte 和 byte):
private static byte ConvertSByteToByte(sbyte input)
{
return input < 0 ? (byte)0 : (byte)input;
}