2012-08-17 6 views
0

간단한 질문 내가 아는 바는 비트 배열에 해당 바이트를 추가하는 데 사용할 파일의 바이트를 가져올 수 있다는 것입니다. 그러면이 바이트를 bytes.exe이라는 파일에 쓰고 실행할 수 있습니다. 런타임시 기존 파일의 바이트를 읽는 방법을 알고 있습니다. 그러나 복사 및 붙여 넣기 파일의 바이트를 디자인 타임에 내 bitarray[]에 넣는 방법을 모르겠습니다.파일의 바이트를 가져 오는 방법은 무엇입니까?

목표는 런타임에 bitarray[]의 비트를 myfile.exe에 쓰고 그 파일을 시작할 수있게하는 것입니다. 많이 다른 파일 형식을 기반으로 사용하게 될 bitarray[]'s이 많기 때문에 쉬운 방법을 찾고 있습니다.

어떤 종류의 디 컴파일러를 사용해야합니까? 리소스 스크립트를 살펴 보았지만 메인 .exe에 종속성을 첨부하고 싶지 않습니다.

+0

명시 적으로 파일을 복사 할 때 문제가 있습니까? 수동으로 바이트를 이동하려고하는 이유가 있습니까? –

+0

디자인 타임에 파일을 복사한다는 의미입니까? 어떻게해야합니까? –

+0

"디자인 타임"이란 무엇입니까? –

답변

1

Windows를 타겟팅하는 경우 가장 쉬운 방법은 myfile.exe을 리소스로 포함시킨 다음 런타임에 리소스를로드하고 파일을 만들고 리소스의 내용을 새 파일에 쓰는 것입니다.

리소스를 사용할 수없는 경우 내용물이 myfile.exe 인 바이트 배열을 초기화하고 빌드의 일부로 포함시키는 소스 파일 (.c 또는 .h)을 만들어야합니다.

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; 
} 
+0

좋은 파일입니다. 나는 이미이 작업을 수행하는 프로그램이있을 것입니다. 나는 이미 하나가 없으면 내가 출판 할 것 같아요. –

+0

소스를 사용하여 새 프로그램 인 ExeEmbedder ©를 게시 할 수 있습니까?(농담 50 %) –

+0

vim이 설치되어 있다면,'xxd -i thefile'을 실행하여 같은 것을 할 수 있습니다. – nos

0

그것은 당신이 원하는 것을 100 % 분명하지만, 왜 파일을 읽고 C 배열로 변환하는 작은 프로그램을 작성하지 : 여기 그냥 함께 던진 빠른 대안입니다. 파일 데이터 인 경우입니다

:

01 02 03 04 (binary) 

있는 파일 생성 프로그램 :에 (응용 프로그램의 사전 빌드 단계로이 프로그램을 실행 한 후

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

을하고 Makefile 또는 사용하고있는 시스템을 빌드하십시오) 소스 트리에 출력을 생성하십시오.

이렇게하면 데이터가 응용 프로그램에 컴파일되어 정적으로 사용할 수 있습니다.

내가 말했듯이 이것이 문제를 해결하려고하는지 명확하지 않습니다.

+0

예, 좋아요. 이 방법을 고려했지만 이미 완료되었을 수도 있다고 생각했습니다. 나는 이것을하는 프로그램을 위해 google을 시도했지만 운이 없었다. 어느 날 놀랍게도, 나는 이것이 비교적 일반적 일 것이라고 생각했기 때문에. –

+0

이런 종류의 일은 일반적으로 "리소스"및 "리소스 컴파일러"라고하며, 여기에는 데이터 파일이 다양한 메커니즘을 통해 응용 프로그램에 번들로 제공됩니다. 각 플랫폼마다 다릅니다. 제가 설명하는 것은 가장 적은 기능을 가진 가장 간단한 접근법입니다. –

+0

고마워, 나는 그 키워드 주위에 google거야. 필요한 것은 "abc.exe"프로그램의 바이트를 바이트 배열로 myprog.exe에 넣고 런타임시 newprog.exe와 같은 새로운 바이트 배열로 프로그램을 변환하는 것입니다. –

관련 문제