首页 > 解决方案 > 将字符数组缓冲区作为十六进制存储在 C 中的 uint32_t 缓冲区中

问题描述

我能够读取十六进制文件并将内容存储在字符缓冲区中,我需要将字符缓冲区中的字符作为十六进制值存储在缓冲区中,如下所示。这样我就可以使用该十六进制值写入uint32_t仅接受的硬件数据寄存器。

char * buffer =[AABBCCDDEE112233445566]

输出:

partitioned_buffer=0xAABBCCDD

分区缓冲区= 0xEE112233

等等。任何人都可以帮助解决这个问题。先感谢您。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *fip_buffer;
char *emmc_pattern_buffer;

char hex_pattern() { 
    FILE *fileptr;
    char *buffer;
    long filelen;
    int i,j;
    

    fileptr = fopen("fip.hex", "rb");         
    if( fileptr == NULL ) {
       printf("cannot open file");// exit(1);
     }
    fseek(fileptr, 0, SEEK_END);          
    filelen = ftell(fileptr);            
    rewind(fileptr);                      
    fip_buffer = (char *)malloc((filelen+1)*sizeof(char)); 

    for(i = 0; i < filelen; i++) {
       fread(fip_buffer+i, 1, 1, fileptr); 
    
    }
       
    
    fclose(fileptr); // Close the file
    return(fip_buffer);
}



char hex_pattern_read(int a, int filelen){
char mem[8],mem2[7];
int i,j;
for(i=a;i<filelen;i++){
      mem[j]=fip_buffer[i];
      mem[8]='\0';
      j++;
      if(j==8){strcpy(mem2,mem);j=0; break;
       }
   } 
   emmc_pattern_buffer=mem2;
   return(emmc_pattern_buffer);
}




int main(int argc, char **argv) {
printf("Reading hex file\n");
int i,j;
hex_pattern();
int len = strlen(fip_buffer);
//printf("size of buffer is=%d\n%c\n",len,fip_buffer);
for(i=0; i<2; i++){
  // printf("Entered loop1");
 for(j=0;j<3;j++){
   int temp = (j*8)+(128*i);
    hex_pattern_read(temp,len); //need to store the returned emmc_pattern_buffer character as hex value 
   printf("%02X\n",emmc_pattern_buffer);
  }
}
return 0;

标签: c

解决方案


从评论...

我将十六进制文件内容读入缓冲区,缓冲区中有一系列字符,如 12345678aa64000101681fa1ed19f39d41e ... 等等,我每次尝试读取 8 个字符并且我能够打印它们,但我想存储那个字符为十六进制值。

... 我了解到您正在从输入文件中成功读取 32 位无符号数字的十六进制文本表示,并且您希望将其转换为机器的内部数字表示。为此,字节是否具有单独的单独意义完全没有区别。

因此,完成该任务的最简单方法是使缓冲区至少长 9 个字节,以便它有空间容纳 8 个十六进制数字和一个字符串终止符,确保存在终止符,并使用该strtoul()函数执行转换:

char buffer[9];
// ... fill buffer, including terminator byte ...
char *end;
uint32_t value = strtoul(buffer, &end, 16);
if (end != buffer + 8) // ... handle bad data ...

推荐阅读