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

本文关键字:定位 整数 列表 存储 | 更新日期: 2023-09-27 17:57:05

我有一个整数列表:

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 位用于指令

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

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

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

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

随意将代码中的i替换为您的"指令指针"

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

inst = inst | value & 0xffffff; 

您可以在其中创建结构并定义设置变量:

下面是一个示例:

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);
}