c - 将字符数组缓冲区作为十六进制存储在 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;
解决方案
从评论...
我将十六进制文件内容读入缓冲区,缓冲区中有一系列字符,如 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 ...
推荐阅读
- c# - 使用shell时如何更改iOS中状态栏的颜色
- java - 具有多种类型值的映射 java
- ruby-on-rails - heroku 无法从引导布局加载 CSS/JS
- swift - 如何检测 MKMapview 注释上的按钮按下?
- docker - 在 Docker 中使用 fluentd 日志记录驱动程序时的副作用
- google-cloud-platform - 如何在谷歌云平台创建 MariaDB 数据库?
- r - R:根据特定规则重塑数据框
- java - 如何对 listView 中输入的数字进行加法?我试过这种方式它不起作用
- java - 向后移植应用程序时发生 ConnectivityManager NullPointerException
- java - 什么是正则表达式?