6

として保存された16進値を持つファイルがありますhex.txt

9d ff d5 3c 06 7c 0a

今、私はそれを文字配列に変換する必要があります

unsigned char hex[] = {0x9d,0xff,0xd5,0x3c,0x06,0x7c,0x0a}

どうすればいいのですか ?

4

4 に答える 4

3

hereのようなファイル読み取りの例を使用し、このコードで値を読み取ります。

#include <stdio.h>   /* required for file operations */
#include <conio.h>  /* for clrscr */

FILE *fr;            /* declare the file pointer */

main()

{
   clrscr();

   fr = fopen ("elapsed.dta", "rt");  /* open the file for reading */
   /* elapsed.dta is the name of the file */
   /* "rt" means open the file for reading text */
   char c;
   while(c = fgetc(fr)  != EOF)
   {
      int val = getVal(c) * 16 + getVal(fgetc(fr));
      printf("current number - %d\n", val);
   }
   fclose(fr);  /* close the file prior to exiting the routine */
}

この機能を使用するとともに:

   int getVal(char c)
   {
       int rtVal = 0;

       if(c >= '0' && c <= '9')
       {
           rtVal = c - '0';
       }
       else
       {
           rtVal = c - 'a' + 10;
       }

       return rtVal;
   }
于 2013-09-09T08:09:33.557 に答える
0

ファイルの 2 つのパスを実行します。
1 必要なバイトをスキャンしてカウントします。
2 必要なメモリを割り当て、スキャンを繰り返します。今回は結果を保存します。

size_t ReadHexFile(FILE *inf, unsigned char *dest) {
  size_t count = 0;
  int n;
  if (dest == NULL) {
    unsigned char OneByte;
    while ((n = fscanf(inf, "%hhx", &OneByte)) == 1 ) {
      count++;
    }
  }
  else {
    while ((n = fscanf(inf, "%hhx", dest)) == 1 ) {
      dest++;
    }
  }
  if (n != EOF) {
    ;  // handle syntax error
  }
  return count;
}

#include <stdio.h>
int main() {
  FILE *inf = fopen("hex.txt", "rt");
  size_t n = ReadHexFile(inf, NULL);
  rewind(inf);
  unsigned char *hex = malloc(n);
  ReadHexFile(inf, hex);
  // do somehting with hex
  fclose(inf);
  free(hex);
  return 0;
 }
于 2013-09-09T15:04:44.427 に答える
0

このようなコードを提供できます。適切なインクルードを追加します。

unsigned char * read_file(FILE * file) //Don't forget to free retval after use
{
   int size = 0;
   unsigned int val;
   int startpos = ftell(file);
   while (fscanf(file, "%x ", &val) == 1)
   {
      ++size;
   }
   unsigned char * retval = (unsigned char *) malloc(size);
   fseek(file, startpos, SEEK_SET); //if the file was not on the beginning when we started
   int pos = 0;
   while (fscanf(file, "%x ", &val) == 1)
   {
      retval[pos++] = (unsigned char) val;
   }
   return retval;
}
于 2013-09-09T08:19:53.987 に答える