点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~ 工作与写公众号的时间仍在平衡中…… 今天和大家一个十六进制文本转成十六进制字符并存储到二进制文件中的demo. 程序平台:ubuntu16.04 自带gcc编译器 一、程序源码 1. 主要说下将两个字符转为一组十六进制字符这块。试想一下将123分解为1 2 3三个字符,即每次对10取余然后取出字符;这里与之相反,提取出字符后每次左移4位(二进制状态下)或者说每次乘以16,再组合高位与低位字符 还有就是注意数据类型,否则数据会溢出,unsigned char 程序中的0x41、0x61等可与ascii表对照 2. 使用linux 下的xxd命令可将二进制文件转为十六进制文件进行显示 3. 效果图片如下 二、小结 找到自己学习新知识的节奏与方法! 希望我的一点点儿能对大家有帮助,感谢!共同进步! 如需源码,可在公众号后台留言。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <errno.h> //采用C模式读二进制文件 void DataRead_CMode() { FILE *fid; fid = fopen("binary.dat","rb"); if(fid == NULL) { printf("读取文件出错"); return; } unsigned char pos[8]; fread(pos,sizeof(unsigned char),10,fid); for(int i = 0; i < 8; i++) printf("read ret: %02xn", pos[i]); fclose(fid); } //将两个字符合成一个字符数据 unsigned char trans(char * buffer) { unsigned char temp = 0; for(int i = 0; i < 2; i++) { temp = temp << 4; if(buffer[i] >= '0' && buffer[i] <= '9') { temp += buffer[i] - 0x30; } else if(buffer[i] >= 'a' && buffer[i] <= 'f') { temp += buffer[i] - 0x61 + 0x0a; } else if(buffer[i] >= 'A' && buffer[i] <= 'F') { temp += buffer[i] - 0x41 + 0x0a; } else { printf("get wrong value: %02X ,file: %s ,line: %dn",buffer[i],__FILE__,__LINE__); } } return temp; } char str[] = "ffaa56fc010100ff"; void main() { //写数据 FILE *fid; fid = fopen("binary.dat","wb"); if(fid == NULL) { printf("写出文件出错"); return; } for(int i=0; i< strlen(str); i+=2) { unsigned char tmp = trans(&str[i]); printf("src: %02X n",tmp); fwrite(&tmp,sizeof(unsigned char),1,fid); } fclose(fid); DataRead_CMode(); }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算