gpt4 book ai didi

c# - 如何在带符号的 int 中存储和检索 4 个 sbyte 值

转载 作者:行者123 更新时间:2023-11-30 17:01:59 26 4
gpt4 key购买 nike

由于 Unity 序列化的限制,我需要在一个带符号的 int 中存储 4 个 sbyte 值。对于无符号整数,这对我来说很容易做到,但是当我尝试使用有符号整数时,一切都变得不稳定。

存储在 signed int => 0xFF (sbyte), 0xFF (sbyte), 0xFF (sbyte), 0xFF (sbyte)

(我收到以下代码的错误)

警告 CS0675:运算符 |'用于符号扩展类型int'。首先考虑转换为较小的无符号类型

错误 CS0266:无法将类型 long' 隐式转换为 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.");
}

最佳答案

我不确定所签名值的意义是什么。我知道您想基本上“连接”字节以形成一个 int。

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

强制转换为 unsigned 是避免特殊处理符号位的逻辑移位行为所必需的。

关于c# - 如何在带符号的 int 中存储和检索 4 个 sbyte 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20432111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com