实现一个小程序,把txt文件里面的十六进制数据读取出来,转成bin文件
生活随笔
收集整理的這篇文章主要介紹了
实现一个小程序,把txt文件里面的十六进制数据读取出来,转成bin文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
txt文件里面裝的是十六進制的數據,而bin文件是二進制,因此我們要把十六進制轉為二進制。實現思路就是,以可讀的方式打開txt文件,然后以讀寫打開或建立一個二進制是wb+,打開后,不斷的用fgetc讀取一個字符,如果遇到空格換行那些繼續,如果遇到0~9,還有a~f,需要做轉二進制的操作,我定義了一個數組data[2] ,fgetc讀到的字符分別放到data[0],data[1]里面去,當i等于二的時候我重新i為0,這樣能不斷的放到data[0],data[1]里面去,然后再對data[0],data[1]合并轉換,轉成bin文件所想的進程,我用in來接收,然后再將這個處理的in用fputc放到目標bin下,直到讀取完為止就退出
?
利用ascii碼,把字符轉為我們真正的數值,然后2個數值合并為一個16進制數值,這樣就可以存放了在一個字節的數組里面了。
#include <stdio.h> #include <stdint.h>uint32_t i = 0; uint32_t cnt = 0;int hexHandler(char *fileSrcName,char *fileDesName) {FILE* fpSrc;FILE* fpDes;int out, in;int data[2];//打開源文件//FILE *fopen(char *filename, char *mode),如果此文件不能打開,則返回NULL指針。fpSrc = fopen(fileSrcName, "r");if (fpSrc ==NULL){printf("%s cannot be open!\n", fileSrcName);return -1;} //以讀寫打開或建立一個二進制是wb+fpDes = fopen(fileDesName, "wb+");if (fpDes == NULL){printf("could not create the binary file: %s\n", fileDesName);return -1;}while (1){//如果到達文件末尾或發生讀錯誤,則返回 EOF int fgetc(FILE *stream)out = fgetc(fpSrc);if (out == EOF){if (i == 1){fputc(data[0], fpDes);cnt++;}break;}//如果遇到空格、\r、\n這些符號繼續else if (out == ' ' || out == '\n' || out == '\r'){continue;}//大于0小于9的ascii就減去0,得到的就是阿拉伯數字else if (out >= '0' && out <= '9'){out = out - '0';}//A到F,減去A+10,就是十多else if (out >= 'a' && out <= 'f'){out = out - 'a' + 10;}else if (out >= 'A' && out <= 'F'){out = out - 'A' + 10;}else{printf("存在其他二進制文件!\n");fclose(fpDes);fclose(fpSrc);return -1;}//我定義了個數組data[2],分別把得到的字符放入data[0],data[1]data[i] = out;i++;if (i == 2){i = 0;//將data[0] data[1]相加進行轉換操作in = (data[0] << 4) + data[1];//將處理后的數據放進.bin 文件//int fputc(int char, FILE *stream) 把參數 char 指定的字符(一個無符號字符)寫入到指定的流fputc(in, fpDes);cnt++;}}fclose(fpDes);fclose(fpSrc);}int main(int argc,char **argv) {char *fileSrcName = argv[1];char *fileDesName = argv[2];//提示用戶用./a.out xxx.txt xxx.bin運行if(argc <2 ){printf("please input ./a.out xxx.txt xxx.bin");}//封裝了一個進制處理函數hexHandler(fileSrcName,fileDesName);printf("transform success!\n");printf("totall %d bytes!\n", cnt);return 0; }目標bin文件,在32位系統上使用hexdump確認結果是否正確
小白寫博客,如有不足,望原諒!
總結
以上是生活随笔為你收集整理的实现一个小程序,把txt文件里面的十六进制数据读取出来,转成bin文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu1804(树莓派)使用AV接
- 下一篇: 华为实现中:STP链路或端口失效后网络重