C# 如何在有符号整数中存储和检索4个sbyte值

C# 如何在有符号整数中存储和检索4个sbyte值,c#,C#,由于Unity序列化的限制,我需要在一个有符号整数中存储4个sbyte值。这对我来说很容易处理无符号整数,但当我尝试处理有符号整数时,一切都变得不可靠 在有符号整数中存储=>0xFF(sbyte)、0xFF(sbyte)、0xFF(sbyte)、0xFF(sbyte) (我发现以下代码有错误) 警告CS0675:运算符|'用于扩展类型的标志int'。考虑将一个较小的无符号类型转换为 错误CS0266:无法将类型long'隐式转换为int'。存在显式转换(是否缺少强制转换?) int data=d

由于Unity序列化的限制,我需要在一个有符号整数中存储4个sbyte值。这对我来说很容易处理无符号整数,但当我尝试处理有符号整数时,一切都变得不可靠

在有符号整数中存储=>0xFF(sbyte)、0xFF(sbyte)、0xFF(sbyte)、0xFF(sbyte)

(我发现以下代码有错误)

警告CS0675:运算符
|'用于扩展类型的标志
int'。考虑将一个较小的无符号类型转换为

错误CS0266:无法将类型
long'隐式转换为
int'。存在显式转换(是否缺少强制转换?)

int data=datas[index];
开关(偏置)
{
案例0:

data=unchecked((data&0x00FFFFFF)|((byte)value我不确定被签名的值的意义是什么。我知道您希望基本上“连接”字节以形成一个int

int i = unchecked (
 (byte)byte0 << 24 | (byte)byte1 << 16 | (byte)byte2 << 8 | (byte)byte3 << 0);
int i=未选中(

(字节)字节0嗯,您是如何将0xFF(255位十进制数)转换为sbyte(-128到127)的?@kostyan msb是有符号位。@被解释为有符号字节的kostyan 0xFF是小数中的-1,不会对字节强制转换为负的sbyte-to-byte引发范围异常?我认为您必须将这些强制转换打包为
unchecked()
@hatchet good point。也取决于编译器设置。默认值未选中。
int data=datas[index];开关(offset){case 0:data=unchecked((data&0x00FFFFFF)|((byte)值请参阅修订后的问题。我正在尝试更新int的各个部分,而不是一次将它们全部设置。您的代码非常好。这些错误只是试图帮助您避免错误。通过将文本转换为正确的数据类型(如
(int))来消除它们0xFF00FFFF
。不确定警告来自何处。可能只是在某处添加另一个演员阵容。这一点不完全是我的专长。
int i = unchecked (
 (byte)byte0 << 24 | (byte)byte1 << 16 | (byte)byte2 << 8 | (byte)byte3 << 0);