存储整数 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 位用于指令
我的理解是,您希望将整数中的低 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);
}