我有一个十六进制值保存为hex.txt
的文件,其中包含
9d ff d5 3c 06 7c 0a
现在我需要将它转换为字符数组
unsigned char hex[] = {0x9d,0xff,0xd5,0x3c,0x06,0x7c,0x0a}
我该怎么做?
答案 0 :(得分: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;
}
答案 1 :(得分:3)
此代码完成工作!!!,但要求我们使用#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");
}
答案 2 :(得分: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;
}
答案 3 :(得分: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;
}