c - 解析十六进制文件并将其拆分为 6 位整数

标签 c arrays hex

我有一个 file包含十六进制代码

 01F640
 01E120
 04EF20
 000000

我想将每 6 位添加到一个数组中。该数组将它们存储为整数,以便程序的其余部分可以计算它们。 Here is the code I have so far .

int main(int argc, const char *argv[]){
   if(argc < 1){
     printf("You need to specify a file!");
     exit(EXIT_FAILURE);
   }
   char ch;
   char chars[6];
   int charCount = 0;
   FILE *f;
   f = fopen(argv[1], "r");
   int i = 0, j = 0;
   while((ch = fgetc(f)) != EOF){
     if(ch == '\n') continue;
     printf("r%X", ch);
     printf("\n");
     chars[i] = (char)ch;
     i++;
     if(i <= 6){
       i = 0;
       int hex[6];
       int m;
       for(m = 0; m < 6; m++){
         printf("\ns%X", chars[m]);
         char buffer[1];
         buffer[0] = chars[m];
         hex[m] = (int) strtol(buffer, NULL, 16);
       }
       unsigned int k = (hex[0]<<40)|(hex[1]<<32)|(hex[2]<<24)|(hex[3]<<16)|(hex[4]<<8)|hex[5];
       prog[j++] = k;
       memset(&chars[0], 0, sizeof(chars));
     }
   }

   int l;
   for(l = 0; l < PROG_LENGTH; l++){
     printf("p%X", prog[l]);
     if(prog[l] == 0) break;
   }
 }

我想做的是读取每个字符并将其添加到字符数组中。一旦该数组达到 6,就用这些位创建一个 int 并重置该数组。

Here are some recent builds from Travis .

最佳答案

您可以将字符读入缓冲区,然后使用 strtol

int i = 0, j = 0;
char buffer[7];
buffer[6] = '\0';
while((ch = fgetc(f)) != EOF){
   if(ch == '\n') continue;
   buffer[i++] = ch;
   if(i == 6) {
      i = 0;
      prog[j++] = (int)strtol(buffer, NULL, 16);
   }
}

关于c - 解析十六进制文件并将其拆分为 6 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30201369/

相关文章:

c - typedef 到底声明了什么?

php - 从 mysql 构建数组,并插入 fputcsv 的值

C++ 任何十六进制到字符

c - 为什么 mtrace 实用程序不支持 mmap() 分配?

c - if..else if..else 循环没有正确执行

javascript - 性能 - 您更喜欢哪个选项?

c - 如何使用结构体数组c

c++ - 错误 C2064 : term does not evaluate to a function taking 3 arguments

java - '&'运算符在字节到十六进制转换中的作用是什么?

c - 在C中,读取字符和整数时变量值会发生变化