我正在尝试将一些二进制代码转换为汇编代码,但作为任务的一部分,我不确定如何将数组中的最后5个元素(8个)转换为新数组。正如您所看到的,我设法为opCode创建了一个数组(前3个元素),但我不确定如何将操作数转换为新数组或编辑初始数组。
感谢所有帮助。
void convert_to_assembly(char bin[])
{
int i;
printf("The binary code before spiliting is: ");
char binary[9] = {'1','0','1','1','1','1','1','0'};
for(i=0;i<=7;i++)
{
printf("%c",binary[i]);
}
printf("\n");
char opCode[4];
strncpy(opCode,binary,3);
printf("opcode: ");
for(i=0;i<3;i++)
{
printf("%c",opCode[i]);
}
printf("\n");
}
输出
The binary code before splitting is: 10111110
opcode : 101
operand: ???????
答案 0 :(得分:1)
如果我理解正确(基于@WhozCraig),这对我有用:
void convert_to_assembly(char bin[])
{
int i;
printf("The binary code before spiliting is: ");
char binary[9] = "10111110\0";
printf("%s\n",binary);
char opcode[4];
char operand[6];
strncpy(opcode,binary,3);
opcode[3]='\0';
strncpy(operand,binary+3,6);
printf("opcode: %s\n",opcode);
printf("operand: %s\n",operand);
}
strncpy
会将从binary+3
开始的6个字符复制到operand
,这将从第四个元素开始复制下六个元素。
答案 1 :(得分:0)
由于二进制字符串包含所有信息,我们可以使用#include <stdio.h>
#include <string.h>
union word {
char binary[8];
struct operation {
char opcode[3];
char operand[5];
} opvar;
};
void convert_to_assembly(char *bin) {
union word op;
(void) strncpy(op.binary, bin, sizeof(op.binary));
printf("before splitting: %.8s\n", op.binary);
printf("opcode: %.3s\n", op.opvar.opcode);
printf("operand: %.5s\n", op.opvar.operand);
}
int main() {
convert_to_assembly("10111110");
return 0;
}
将操作码和操作数视为覆盖视图,而无需创建新数组,也无需编写代码来拆分数据:
> ./a.out
before splitting: 10111110
opcode: 101
operand: 11110
>
<强>输出强>
C:\src\Java Signing Addon\Setup\bin\native_manifest.json