日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现一个小程序,把txt文件里面的十六进制数据读取出来,转成bin文件

發布時間:2024/3/26 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现一个小程序,把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文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。