如何在signed int中存储和检索4个sbyte值

时间:2013-12-06 19:34:27

标签: c#

由于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.");
    }

1 个答案:

答案 0 :(得分:2)

我不确定签署的值的重要性。我知道你想基本上“连接”字节以形成一个int。

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

为了避免特殊处理符号位的逻辑移位行为,必须使用无符号转换。