1

私が知りたいのは、ファイルのバイトを取得して、それらのバイトをビット配列に追加するために使用できるようにすることです。これを使用して、名前付きのファイルに書き込み、bytes.exeそれを起動できます。実行時に既存のファイルのバイトを読み取る方法を知っています。bitarray[]しかし、設計時にファイルのバイトをコピーして貼り付ける方法がわかりません。

目標は、実行時ににバイトを書き込んでbitarray[]からmyfile.exe、そのファイルを起動できるようにすることです。さまざまなファイルの種類に基づいて、使用するものがたくさんbitarray[]'sあるので、簡単な方法を探しています。

使用すべきある種の逆コンパイラはありますか? リソース スクリプトを調べただけですが、メインの .exe に依存関係を追加したくありません。

4

2 に答える 2

2

Windows をターゲットにしている場合、これを行う最も簡単な方法は、リソースとして埋め込みmyfile.exe、実行時にリソースをロードしてファイルを作成し、リソースの内容を新しいファイルに書き込むことです。

リソースを使用できない場合は、バイト配列をその内容で初期化するソース ファイル (.c または .h) を作成し、それをmyfile.exeビルドの一部として含める必要があります。考えられるアプローチの1つについては、この回答を確認してください。

https://stackoverflow.com/a/73653/333127

編集:さらに検討した結果、上記で参照したリンクのソースコードがバイナリ入力ファイルで機能するとは思わない。これは、私がまとめた簡単な代替手段です。

#include <stdio.h>
#include <stdlib.h>

#define BYTES_PER_LINE 70

int main(int argc, char* argv[])
{
    FILE* fp;
    int ch;
    int numBytes = 0;

    if (argc < 2) {
        printf("Usage: tobytes <file>\n");
        exit(1);
    }

    fp = fopen(argv[1], "rb");
    if (fp == NULL) {
        printf("Cannot open file %s\n", argv[1]);
        exit(1);
    }

    printf("char fileContents[] = {\n");
    while ((ch = fgetc(fp)) != EOF) {
        if (numBytes > 0)
            printf(",");

        ++numBytes;
        if (numBytes % BYTES_PER_LINE == 0)
            printf("\n");

        printf("0x%x", ch);
    }
    printf("\n};\n");

    fclose(fp);

    return 0;
}
于 2012-08-17T05:56:53.083 に答える
0

何をしたいのかは 100% 明確ではありませんが、ファイルを読み取って C 配列に変換する小さなプログラムを作成してみませんか。

つまり、ファイル データが次の場合です。

01 02 03 04 (binary)

プログラムは次のファイルを生成します。

char data[] = {0x01, 0x02, 0x03, 0x04};

次に、このプログラムをアプリケーションのビルド前のステップとして (Makefile または使用しているビルド システムで) 実行し、出力をソース ツリーに生成します。

このようにして、データはアプリケーションにコンパイルされ、静的に利用できるようになります。

私が言ったように、これがあなたが解決しようとしている問題であるかどうかはわかりません。

于 2012-08-17T06:10:55.273 に答える