我有一个整体列表:
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位用于指令
答案 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);
}