![](/img/trans.png)
[英]Why do “int” and “sbyte” GetHashCode functions generate different values?
[英]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.