user-0 提问: 关于C语言读取txt文件数据

回复:
user: user-1
content: 代码没有问题吧。  #include <stdio.h>  int main() {   //13 12 AA   char const* p = "13 12 AA";   unsigned int a, b,c;   sscanf(p, "%x%x%x", &a, &b,&c);   printf("%x %x %x\n",a, b, c);   return 0; }

user: user-2
content: 用二进制方式打开：fopen（name，“b”）；就方便多了

user: user-3
content: #include <stdio.h> #include <string.h> #include <conio.h> FILE *fi,*fo; int r; unsigned int n,c; //------------------------------------------------------- void main(int argc,char *argv[]) {     if (argc<3) {         cprintf("Hex2Bin srcfile desfile");         return;     }     if ((fi=fopen(argv[1],"r"))==NULL) {         cprintf("Can not find file %s",argv[1]);         return;     }     if ((fo=fopen(argv[2],"wb"))==NULL) {         fclose(fi);         cprintf("Can not create file %s",argv[2]);         return;     }     n=0;     while (1) {         r=fscanf(fi,"%2x",&c);         if (EOF==r) break;//         if (1==r) {             fputc(c,fo);             n++;         } else {             r=fgetc(fi);             if (EOF==r) break;//         }     }     fcloseall();     cprintf("OK to Hex2Bin %d bytes.",n); }

user: user-4
content: # cat input  13 12 AA  # hexdump -C output  00000000  13 12 aa                                          |...| 00000003

user: user-4
content: # include <stdio.h>  int main() {     FILE * input_file = fopen("input", "r");     FILE * output_file = fopen("output", "wb");     int i;     char c;      while (fscanf(input_file, "%x", &i) != EOF)     {         c = i;         fwrite(&c, 1, 1, output_file);     }      fclose(input_file);     fclose(output_file);      return 0; }

user: user-0
content: 引用 17 楼 ForestDB 的回复:就是这个意思。太菜伤不起啊。

user: user-4
content: 就是这个意思。

user: user-5
content: 引用 13 楼 tanqiyingk 的回复:[quote=引用 8 楼 u011729265 的回复:] [quote=引用 7 楼 tanqiyingk 的回复:] 我txt文件里面的数据是这样：  while (1) {         if (1!=fscanf(fp_data,"%x",&v)) break;         fwrite(&v,1,1,fp_txt);	     } 单步跟踪直接就跳出while循环了 当我帮TXT文件中的AA 改成100 这样的数据就是正常的 请懂的指点下，我要把AA这样的十六进制的数据读出来，是哪里的问题呢  如果文件里的数据是16进制保存的，你这样打开看到的数据，就不是这样的。 你这样应该是按字符串保存，读来后转换一下。  [/quote]嗯，应该是你说的这样，我要先把字符转换成我想要的数，然后在把这些数转换我想要的十六进制对吧！[/quote]  是这样的。

user: user-0
content: 引用 11 楼 ForestDB 的回复:理解不够深啊  你读的是0x30 0x31 希望写的是0x0D  有什么不同么？刚学习C，不要见笑哈，我明白你的意思了。我读出来的是1 和3 的ASCII值，而我却要写的是0x13这个数，所以我要进行转换对吧，然后把转换好的数，才能变成我想要的格式

user: user-4
content: 我觉得我并没有误会你的意思 你是想读入"13"，但是写入13 还对？

user: user-0
content: 引用 8 楼 u011729265 的回复:[quote=引用 7 楼 tanqiyingk 的回复:] 我txt文件里面的数据是这样：  while (1) {         if (1!=fscanf(fp_data,"%x",&v)) break;         fwrite(&v,1,1,fp_txt);	     } 单步跟踪直接就跳出while循环了 当我帮TXT文件中的AA 改成100 这样的数据就是正常的 请懂的指点下，我要把AA这样的十六进制的数据读出来，是哪里的问题呢  如果文件里的数据是16进制保存的，你这样打开看到的数据，就不是这样的。 你这样应该是按字符串保存，读来后转换一下。  [/quote]嗯，应该是你说的这样，我要先把字符转换成我想要的数，然后在把这些数转换我想要的十六进制对吧！

user: user-0
content: 引用 11 楼 ForestDB 的回复:理解不够深啊  你读的是0x30 0x31 希望写的是0x0D  有什么不同么？你误会我的意思了，我的13是指0x13这样，并不是指0x0D

user: user-4
content: 理解不够深啊  你读的是0x30 0x31 希望写的是0x0D  有什么不同么？

user: user-0
content: 引用 9 楼 ForestDB 的回复:先弄清楚"13" 和0x0D有什么不同ASCII的值

user: user-4
content: 先弄清楚"13" 和0x0D有什么不同

user: user-5
content: 引用 7 楼 tanqiyingk 的回复:我txt文件里面的数据是这样：  while (1) {         if (1!=fscanf(fp_data,"%x",&v)) break;         fwrite(&v,1,1,fp_txt);	     } 单步跟踪直接就跳出while循环了 当我帮TXT文件中的AA 改成100 这样的数据就是正常的 请懂的指点下，我要把AA这样的十六进制的数据读出来，是哪里的问题呢  如果文件里的数据是16进制保存的，你这样打开看到的数据，就不是这样的。 你这样应该是按字符串保存，读来后转换一下。

user: user-0
content: 我txt文件里面的数据是这样：  while (1) {         if (1!=fscanf(fp_data,"%x",&v)) break;         fwrite(&v,1,1,fp_txt);	     } 单步跟踪直接就跳出while循环了 当我帮TXT文件中的AA 改成100 这样的数据就是正常的 请懂的指点下，我要把AA这样的十六进制的数据读出来，是哪里的问题呢

user: user-0
content: 引用 5 楼 mujiok2003 的回复:[quote=引用 4 楼 tanqiyingk 的回复:] [quote=引用 2 楼 mujiok2003 的回复:] 代码没有问题吧。  #include <stdio.h>  int main() {   //13 12 AA   char const* p = "13 12 AA";   unsigned int a, b,c;   sscanf(p, "%x%x%x", &a, &b,&c);   printf("%x %x %x\n",a, b, c);   return 0; }这样是没错，但是要问的是怎样讲TXT文件中的16进制的数据读出来，存放到一个指针里面呢[/quote]  sscanf换fscanf就可以了， 没有本质区别。 [/quote]我现在用的就是这样啊  fscanf(fp_data,"%x",&v))

user: user-1
content: 引用 4 楼 tanqiyingk 的回复:[quote=引用 2 楼 mujiok2003 的回复:] 代码没有问题吧。  #include <stdio.h>  int main() {   //13 12 AA   char const* p = "13 12 AA";   unsigned int a, b,c;   sscanf(p, "%x%x%x", &a, &b,&c);   printf("%x %x %x\n",a, b, c);   return 0; }这样是没错，但是要问的是怎样讲TXT文件中的16进制的数据读出来，存放到一个指针里面呢[/quote]  sscanf换fscanf就可以了， 没有本质区别。

user: user-0
content: 引用 2 楼 mujiok2003 的回复:代码没有问题吧。  #include <stdio.h>  int main() {   //13 12 AA   char const* p = "13 12 AA";   unsigned int a, b,c;   sscanf(p, "%x%x%x", &a, &b,&c);   printf("%x %x %x\n",a, b, c);   return 0; }这样是没错，但是要问的是怎样讲TXT文件中的16进制的数据读出来，存放到一个指针里面呢