专栏首页Pou光明十六进制文本转字符存储到二进制文件

十六进制文本转字符存储到二进制文件

今天和大家分享一个十六进制文本转成十六进制字符并存储到二进制文件中的demo.

程序平台:ubuntu16.04 自带gcc编译器

一、程序源码

#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: %02x\n", 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: %d\n",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();
}

1. 主要说下将两个字符转为一组十六进制字符这块。试想一下将123分解为1 2 3三个字符,即每次对10取余然后取出字符;这里与之相反,提取出字符后每次左移4位(二进制状态下)或者说每次乘以16,再组合高位与低位字符

还有就是注意数据类型,否则数据会溢出,unsigned char

程序中的0x41、0x61等可与ascii表对照

2. 使用linux 下的xxd命令可将二进制文件转为十六进制文件进行显示

3. 效果图片如下

本文分享自微信公众号 - Pou光明(pou0230),作者:PouG

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • c++ 十六进制字符转换十进制_将二进制、八进制、十六进制转换为十进制

    9节课征服「字符编码」-1-字符、字符集、字符编号与字符编码(基础课)-周华健的在线视频教程​edu.csdn.net

    用户7886150
  • 文字转化成十六进制,及逆转

    系统日志里,对于加密信息和二进制,可以采用十六进制输出,简单加密下。在加密并收取日志后,需要把16进制在转回可识别信息。

    望天
  • C语言读取.txt文本每行字符十进制数据,转int型十进制

    玖柒的小窝
  • od 转储 二进制文件常用命令

     查看 .shstrtab , 使用 --skip-bytes 和 --read-bytes 定位:

    xuyaowen
  • 看到全是十六进制的PHP代码文件?

    前几天在网上看到一份代码,打开来看,里面都是类似下面的十六进制字符串。一脸懵逼,啥情况,我万能的sublime text 打开居然是十六进制文件,而且文件居然还...

    写PHP的老王
  • C# 简单读取文件 读取文件为二进制读取文件为字符串

    如果有找到比我上面代码更少的方法请告诉我,这里不用安装第三方的库,是在快速创建新的项目进行测试

    林德熙
  • 利用 Blob 处理 node 层返回的二进制文件流字符串并下载文件

    看到标题有点懵逼,哈哈,实际上是后端将文件处理成二进制流,返回到前端,前端处理这个二进制字符串,输出文件或下载

    Krry
  • 【Coding】聊聊字符编码那些事儿

    文本文件中存放的数据在用户读取时可以按照编码类型还原成字符形式,我们可以直接打开,如下:

    一名白帽的成长史
  • C语言零基础入门难发愁,那就快来看看这篇基础整理资料吧

    用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使小伙伴对c语言有个初步认识。

    用户6754675
  • 【必读】超全的C语言基础知识大全

    我们用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,加深小伙伴们对C语言的认识。

    老九君
  • 【必读】C语言基础知识大全

    C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使小伙伴对c语言有个初步认识。 例1:计算两个整数之和的c程...

    老九君
  • python3.x

    爬虫、大数据、测试、Web、AI、脚本处理,自动化运维与自动化测试,机器学习(例如谷歌的Tensor Flow也是支持Python),可以混合C++、Java等...

    _kyle
  • Python 技术篇-获取requests里的二进制文本并保存为音频、图片文件

    核心就是 request.content 保存的是 request 返回的二进制内容。 json 数据是保存在 request.text 里。

    小蓝枣
  • C语言入门基础大全,自学C语言必备知识!

    用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使小伙伴对c语言有个初步认识。

    小林C语言
  • 图片转二进制流并通过HTTP上传到静态文件服务器

    type设置为MediaType.parse("application/json; charset=utf-8")

    麦克劳林
  • python 基础知识第1讲:计算机要点

    将字符转换成二进制编码的过程叫做编码 将二进制码转换成字符的过程叫做解码 编码和解码都要遵守的规则是字符集

    小海怪的互联网
  • 编码总结笔记 原

    我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一...

    wuweixiang
  • [Java 基础]数据类型

    基本类型和引用类型 Java中的数据类型有两类: l 基本类型(又叫内置数据类型,或理解为值类型) l 引用类型 ? 基本类型和引用类型的区别 1. 从概念方面...

    静默虚空
  • 字符编码

    字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?

    明明如月学长

扫码关注云+社区

领取腾讯云代金券