从整数列表C#存储特定数量的位

时间:2014-04-07 15:02:17

标签: c# byte type-conversion

我有一个整体列表:

public List<int> binaryVector;

但是我想只读取该整数的前8个字节并将其存储为变量。然后我想对那之后的整数的下一个24字节做同样的事情。二进制向量中的所有整数都是32位。关于如何做到这一点的任何想法?

int的前24位被认为是指令所持有的值。最后8位是一个数值,如果在哈希表中查找,则转换为指令

示例:

lda#$ 5 //将值加载到累加器

当转换为二进制时,它被放入32位int格式并存储在二进制向量中。 前24位是存储的值,在这种情况下是值5.最后8位是为指令保留的。

我想读取32位int的片段并将它们存储为变量。例如,我想读取上面给出的示例的前24位并将其存储为应该等于5的int变量。

我如何存储说明:

int IMM = 16777216;

int inst = instructionValue;

inst = inst | IMM;


inst = inst << 24;

inst = inst | value; 

24位是值,25位像布尔值1或0告诉我该值是否为立即数。最后7位用于指令

2 个答案:

答案 0 :(得分:1)

我的理解是你要将整数中的低24位提取到param中,将高8位提取到命令中。

您可以通过以下方式执行此操作:

var param = binaryVector[i] & 0xffffff;
var command = (binaryVector[i] >> 24) & 0xff;

可以使用&#34;指令指针替换代码中的i&#34;

提示:在构造不超过24位的指令整数时要小心。您的代码应该使用掩码保护这种情况,否则您将破坏命令字节:

inst = inst | value & 0xffffff; 

答案 1 :(得分:0)

你可以在那里创建struct和define set变量:

以下是一个例子:

struct SimpleStruct
{
    private int xval;
    public int X
    {
        get 
        {
            // write what you need here
        }
        set 
        {
           // set your variable here
        }
    }

}

然后你可以定义你的清单:

public static List<SimpleStruct> myList{ get; private set; }

或者如果你想用方法制作它,你可以使用这样的例子:

public byte ReadFirstNBits(int n)
{
    Contract.Requires(n >= 0 && n <= 8, "Code contract may be too slow for your needs");
    byte val = base.ReadByte();
    return val >> (8 - n);
}