Reading file contents as hexadecimal in C

I have a file with hexadecimal values โ€‹โ€‹saved as hex.txt which has

 9d ff d5 3c 06 7c 0a 

Now I need to convert it to an array of characters as

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

How can I do it?

+6
source share
4 answers

This code does the job !!!, but requires that we initialize the size of the hex to be converted using #define FILELEN 15

 #include<stdio.h> #define FILELEN 15 int ascii_to_hex(char c) { int num = (int) c; if(num < 58 && num > 47) { return num - 48; } if(num < 103 && num > 96) { return num - 87; } return num; } int main() { FILE *fp = fopen("sample","r"); unsigned char c1,c2; int i=0; unsigned char sum,final_hex[FILELEN/2]; for(i=0;i<FILELEN/2;i++) { c1 = ascii_to_hex(fgetc(fp)); c2 = ascii_to_hex(fgetc(fp)); sum = c1<<4 | c2; final_hex[i] = sum; printf("%02x ",sum); } printf("\n"); } 
+3
source

use the example of reading a file, for example, here , and with this code read the values:

 #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 */ } 

along with using this function:

  int getVal(char c) { int rtVal = 0; if(c >= '0' && c <= '9') { rtVal = c - '0'; } else { rtVal = c - 'a' + 10; } return rtVal; } 
+4
source

I can offer such a code. Add appropriate includes.

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

Perform 2 passes through the file.
1 Scan and count the required bytes.
2 Highlight the required memory, then repeat the scan, this time save the results.

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

Source: https://habr.com/ru/post/953458/


All Articles