C语言 给定函数' decode ',我如何做逆并写一个函数' encode '



基本上,我有一个名为encode的函数,我想做相反的事情,基本上编码成十六进制值。此外,值得一提的是,我正在用c语言写作。

void decode(somestruct *thing, int instr) {
    thing->instrNum = (instr & 0xF000) >> 12;
    thing->reg1     = (instr & 0xF00 ) >>  8;
    thing->reg2     = (instr & 0xF0  ) >>  4;
    thing->reg3     = (instr & 0xF   );
    thing->imm      = (instr & 0xFF  );
}

有什么办法我可以做到这一点,最好是越小越好:)我正在考虑这样布局:

int encode(int instrNum, int reg1, int reg2, int reg3, int imm) {
    // do conversion to base 2 then base 16
    return the_base_16_conversion;
}

理想情况下,我希望它返回一个值,如0x6100。

请告诉我,如果这没有意义,我不太擅长写问题:(

如果您有imm,则不需要reg2reg3。使用左移来"撤销"右移。使用按位"OR"来组合各部分。整个函数看起来像这样:

return ((instrNum  & 0xF) << 12) | ((reg1 & 0xF) << 8) | imm;

如果只能指定imm或{reg2, reg3}对中的一个,则可以在return语句之前执行此准备步骤:

if (!imm) imm = ((reg2 & 0xF) << 8) | (reg3 & 0xF);

最新更新