在C中将数组拆分为两个

时间:2016-11-17 20:29:29

标签: c arrays assembly split

我正在尝试将一些二进制代码转换为汇编代码,但作为任务的一部分,我不确定如何将数组中的最后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: ???????

2 个答案:

答案 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