2023-04-29 读取内容为十六进制数字的txt文件转换为二进制文件

2023-11-10

读取内容为十六进制数字的txt文件转换为二进制文件


前言

一个有趣的题目: 读取txt文件内容两两结合,存储为dat文件 , 实现十分简单, 有很多有意思的回答, 但大都是python, 其实这个用C的格式化读取fscanf( ) 配合二进制写入 fwrite( ) 就能轻松解决的.


一. 示例代码

fscanf( ) 函数

int fscanf(FILE *stream, const char *format, ...)

有专门十六进制读写, 还可以控制读写的长度, “%2X”, 每次读长度为2的一个文本,转换为一个实际的数.

十六进制(hex)是一种基数为16的计数系统,是一种逢16进1的进位制。
通常用数字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)表示,
其中:A~F表示10~15,这些称作十六进制数字。

在fscanf()函数中, 十六进制的格式是%X, 而读取位数则是跟在%后的数字, 如%2X就是读取2位16进制数

fwrite( ) 函数

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

将这个数用1字节存储到另一个文件中, 相当于进行了压缩.

这里有个取巧, 一个int占用4字节, 读出的是4字节内容, 但写入的时候只写入这个int的前八位, 也就是第一字节, 但如果比较贪心, 想一次存入多个字节, 比如4字节, 就会遇到一个问题, 字节序(大端序和小端序), 一般个人机是小端排序, 这会导致4个字节的顺序倒置, 要小心.

a.txt内容如下,文本十六进制数字
1adcffa555
1dfacab555
c.dat内容如下(二进制)
1a dc ff a5 55 1d fa ca b5 55
#include <stdio.h>
 
int main()
{
    FILE *fileIn = fopen("a.txt", "r");
    FILE *fileOut = fopen("c.dat", "wb");
 
    int res = 0;
 
    while (fscanf(fileIn, "%2X", &res) != -1)
    {
        fwrite(&res, 1, 1, fileOut);
    }
 
    fclose(fileIn);
    fclose(fileOut);
 
    return 0;
}

总结

对十六进制比较了解的话, 配合C的标准库, 问题比较容易解决, 但字节序很容易忽略, 容易出现问题.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023-04-29 读取内容为十六进制数字的txt文件转换为二进制文件 的相关文章

随机推荐

  • java用lambda函数排序,Java函数式编程-4.lambda表达式排序

    1 lambda表达式排序 咱们首先看几个比较常见的排序例子 基本数据类型的排序ide List list Arrays asList 1 3 2 5 4 list sort Comparator naturalOrder System o
  • cartographer更新地图-移除未完成的子图

    首先说明为什么要移除未完成的子图 因为如果不删除 每次更新都会保留以前未完成的子图 那时间累计数据量不断增长 不得了 overlapping submaps trimmer移除的只有已经完成的子图 那对于未完成的子图如何处理呢 首先在ove
  • tq210基本参数

    这个板子的核心板为core B 底板为tq210 board v4 1G ddr2 128Mx8pcs 1G slc flash K9K8G08 PMU TPS659101 使用系统自带的sd uboot 使用板子带的串口线 这个线与ok2
  • win10如何修改windows默认远程桌面端口号

    修改默认端口需要修改注册表 打开开始运行 输入regedit 进入注册编辑器 依次点击进入 HKEY LOCAL MACHINE SYSTEM CurrentContro1Set 接着找到 以下路径Control Tenninal Serv
  • NAT穿透 - P2P

    NAT穿透 P2P 一 NAT穿透 二 NAT分类 总结 一 NAT穿透 NAT穿透 即内网穿透 也称为打洞 其网络拓扑示例 二 NAT分类 完全锥型NAT 内网客户端映射到一个外部IP Port IP端口无限制 任意主机都可往该映射端口发
  • 逻辑分析题目:“给你一个9升的水桶和一个4升的水桶,在河里取6升水”

    问题答案 1 大桶装满 然后倒满小桶 这样大桶剩5升 小桶4升 2 小桶倒空 大桶再往小桶灌满 大桶剩1升 小桶4升 3 小桶倒空 把大桶的一升灌进小桶 这时大桶没有了 小桶一升 4 再灌满大桶 此时往已有1升得小桶里灌三升 大桶剩下6升
  • 算法训练Day38

    目录 动态规划理论基础 LeetCode509 斐波那契数 1 思路 2 代码实现 3 复杂度分析 4 总结与收获 LeetCode70 爬楼梯 1 思路 2 代码实现 3 复杂度分析 4 思考与收获 LeetCode746 使用最小花费爬
  • input/textarea文本的选择与获取

    获取input textarea中选择的文本function getSelectedText textbox if document selection IE return document selection createRange te
  • 网络与信息安全——知识整理(1)

    1 The Security Goals a Confidentiality to protect theconfidential information and to guard against the malicious actions
  • 数据结构——算法

    算法是什么 算法 Algorithm 是对解题方案的准确而完整的描述 是一系列解决问题的清晰指令 说白了就是 用来解决问题的 算法的特性 必须全部符合才可称之为一个算法 1 有穷性 一个算法必须在执行有穷步后结束且每一步必须在有穷时间内完成
  • Unity项目架构

    整理了一下Unity项目客户端涵盖一些内容 如果有遗漏 欢迎大家指出 感谢
  • 动画 + 大白话讲清楚React渲染原理

    前言 相信很多人跟我之前一样 看到源码两个字觉得触不可及 觉得离自己还很遥远 是需要非常多年的工作经验的大佬才能触及到的领域 就在去年我改变了这个想法 当时被react的几个生命周期执行顺序弄的睡不着觉 为什么有些时候生命周期的执行事与愿违
  • 小软件项目开发的管理

    小软件项目开发的管理 创建成功的工程 成功项目管理的秘密 更好地领导一个项目的诀窍 参与变革 走向成功 CMM TSP PSP讲义稿 开发流程中的可用性 软件开发的管理和控制 如何组织软件开发团队 软件项目管理 CMM 经验谈 实施CMM
  • stable-diffusion的webui和comfyuig共享模型路径

    1 修改上图extra model paths yaml example为extra model paths yaml Rename this to extra model paths yaml and ComfyUI will load
  • 最长公共子序列问题(Java)-动态规划

    动态规划法 经常会遇到复杂问题不能简单地分解成几个子问题 而会分解出一系列的子问题 简单地采用把大问题分解成子问题 并综合子问题的解导出大问题的解的方法 问题求解耗时会按问题规模呈幂级数增加 为了节约重复求相同子问题的时间 引入一个数组 不
  • 关于Springcloud的RestTemplate使用服务名报异常java.net.UnknownHostException

    关于Springcloud的RestTemplate使用服务名报异常java net UnknownHostException和使用localhost 8081报异常java lang IllegalStateException No in
  • ConstraintLayout基本使用之toLeftOf 、toTopOf、toRightOf、toBottomOf

    关于ConstraintLayout的博客 文章想必大家已经见过很多了 都是很全面的 今天这篇博客主要将ConstraintLayout的 layout constraintLeft toLeftOf layout constraintLe
  • HTML常考知识点和面试题

    保证页面不会出现编码问题 乱码 宽度等于设备宽度 初始化比例等于1 最大初始化比例等于1 user scalable no 将控制用户无法进行触屏扩大或缩小网页 适配移动端的第一步加上viewport 再针对手机屏幕大小调整 指定一个基础的
  • 【LeetCode队列】933 最近的请求次数 RecentCounter(java实现)

    文章目录 题目描述 一 解题思路 二 代码 1 最近的请求次数 2 测试数据 3 复杂度分析 4 执行时间 题目描述 写一个 RecentCounter 类来计算特定时间范围内最近的请求 请你实现 RecentCounter 类 Recen
  • 2023-04-29 读取内容为十六进制数字的txt文件转换为二进制文件

    读取内容为十六进制数字的txt文件转换为二进制文件 前言 一 示例代码 总结 前言 一个有趣的题目 读取txt文件内容两两结合 存储为dat文件 实现十分简单 有很多有意思的回答 但大都是python 其实这个用C的格式化读取fscanf