2016-11-17 32 views
-1

いくつかのバイナリコードをアセンブリに変換しようとしていますが、タスクの一環として、配列内の最後の5つの要素(8個)を新しいアレイ。ご覧のとおり、最初の3つの要素であるopCode用の配列を作成しましたが、オペランドを新しい配列に取得する方法や最初の要素を編集する方法がわかりません。配列を2つに分割する

すべてのご協力をいただきありがとうございます。

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

Picky:9アレイの8要素を初期化するだけでしたか?文字列として使用するつもりなら、最後の要素は自動的に ''\ 0' 'に初期化されません。 –

+0

@WeatherVane彼のループは明示的に8要素を数えているので、彼がしたと思う。 – 8protons

+1

@WeatherVaneそれは、char配列を0終了するための1つの方法であると考えられ、したがってCの文字列を持っています。 = P。厳密に直感的ではない、指定されていない末尾の内容ゼロが長さ指定のシーケンスで満たされないか? (今朝私のコーヒーを忘れてしまった。 – WhozCraig

答えて

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); 
} 

strncpyoperandbinary+3で始まる6つの文字をコピーします4番目の要素から次の6つの要素をコピーします。

+0

はい、私が探していたものです。どうもありがとう! –

+0

問題ありません! @WhozCraigに感謝します! – abacles

+0

私は不思議です、なぜ 'opcode [3] = '\ 0';'?ゼロをゼロとして書くのはなぜですか? 'opcode [3] = 0;'? – Ped7g

0

バイナリ文字列は、すべての情報が含まれているので、我々はデータを引き裂くために新しいアレイを作成したり、コードを記述せずにunionを使用してオーバーレイビューとしてオペコードとオペランドを扱うことができます。

#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; 
} 

OUTPUT

> ./a.out 
before splitting: 10111110 
opcode: 101 
operand: 11110 
> 
関連する問題