由于Unity序列化的限制,我需要在单个signed int中存储4个sbyte值。这对我来说很容易使用无符号整数,但是当我使用有符号整数进行尝试时,事情就会变得难以理解。
以signed int =>存储0xFF(sbyte),0xFF(sbyte),0xFF(sbyte),0xFF(sbyte)
(我在下面的代码中遇到错误)
警告CS0675:运算符|' used on the sign-extended type
int'。考虑首先转换为较小的无符号类型
错误CS0266:无法隐式转换类型long' to
int'。存在显式转换(您是否错过了演员?)
int data = datas[index];
switch (offset)
{
case 0:
data = unchecked ((data & 0x00FFFFFF) | ((byte) value << 24));
break;
case 1:
data = unchecked ((data & 0xFF00FFFF) | ((byte) value << 16));
break;
case 2:
data = unchecked ((data & 0xFFFF00FF) | ((byte) value << 8));
break;
case 3:
data = unchecked ((data & 0xFFFFFF00) | (byte) value);
break;
default:
throw new Exception("Invalid offset.");
}
答案 0 :(得分:2)
我不确定签署的值的重要性。我知道你想基本上“连接”字节以形成一个int。
int i = unchecked (
(byte)byte0 << 24 | (byte)byte1 << 16 | (byte)byte2 << 8 | (byte)byte3 << 0);
为了避免特殊处理符号位的逻辑移位行为,必须使用无符号转换。