簡體   English   中英

如何在signed int中存儲和檢索4個sbyte值

[英]How to store and retrieve 4 sbyte values in a signed int

由於Unity序列化的限制,我需要在單個signed int中存儲4個sbyte值。 這對我來說很容易使用無符號整數,但是當我使用有符號整數進行嘗試時,事情就會變得難以理解。

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

(我在下面的代碼中出錯)

警告CS0675:操作員|' used on the sign-extended type |' used on the sign-extended type int'。 首先考慮轉換為較小的無符號類型

錯誤CS0266:無法將long' to類型隱式轉換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.");
    }

我不確定簽署的值的重要性。 我知道你想基本上“連接”字節以形成一個int。

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

為了避免特殊處理符號位的邏輯移位行為,必須使用無符號轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM