Dar*_*ski 1 c# encoding 32-bit bit-manipulation bitwise-operators
如何在C#中将8 4bit(0..15或0..F,如果你喜欢hex;))值放入Int32(int)并将它们取回?我需要这些用于我正在编写的游戏,或者更具体地说,它是编辑器(它将以Notch失败的0x10c中的顶点操作为特征),并且由于已经有一些遗留代码和几个级别构建,我真的不能打破格式所以我可以使用Int64并使用BitConverter类编码8个8位值;).
我不是很擅长按位操作,那些试图向我解释这些的人到目前为止都失败了所以是的.需要帮忙.
其主要思想是使用左<<移位,并|以编码和&右>>转向解码.假设值组织为数组:
byte[] data = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
int result = data
.Select((value, i) => value << (4 * i))
.Aggregate((x, y) => x | y); // or just .Sum() - Jeppe Stig Nielsen's idea
Run Code Online (Sandbox Code Playgroud)
编辑: for循环实现:
int result = 0;
for (int i = 0; i < data.Length; ++i)
result |= data[i] << (4 * i);
Run Code Online (Sandbox Code Playgroud)
为了检索该index第值(index在[0..7]范围)
byte item = (byte) ((result >> (index * 4)) & 0xF);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |