当前位置: 首页 > web >正文

二进制为什么使用记事本读取会出乱码

文件其实都是电信号,没有真正的 0 1 数字,有的只是高低电平

二进制读取:(二进制读取时一种显示方式,把高低电平显示出来)

把高低电平用数字01表示 就读取成0-1形式,8为一个字节(即8位为一个数字0-255)就读取成8位的形式。或者读取16个高低电平显示出来作为16位数字(计算机读取8的整数倍(字节)电平,用来显示)

几进制都可以,表示的8位电平,10进制0-255表示的也是8位电平,一个字节
16进制是电平的表示方法,8位电平,可以用两个16进制数表示,或者用最大3位10进制数255表示

十进制十六进制二进制电平(8 位)
100xA00001010
150xF00001111
160x1000010000
310x1F00011111
2550xFF11111111

记事本读取:

高低电平是0-1,8个为一组读取成数字,再使用编码规则把数字映射成字符。

所以记事本写数字并保存下来,二进制文件只有数据信息,不包含记事本的注解信息。
但记事本会根据所选的编码保存文件。如果书写a

  • 如果用 ANSIUTF-8(无 BOM),保存时就真的只会写入一个字节 0x61,和你 Python 写的是一模一样的。

  • 如果用 UTF-8 with BOM(带字节序标记),文件开头会额外加 3 个字节 0xEF 0xBB 0xBF 作为标记。这样文件不止有 97,而是多了“注解信息”。

16进制有好处:
16进制转化成二进制很简单 ,比如1C 可以把 1 和C拆开分别转化成4位2进制,但28却不行,不能把2拆成几位2进制,8也是,再拼接起来。这是因为,16进制正好是最大数15 是 1111,正好是2进制的整数倍

uint8和uint16:
用于选取几位二进制变成10进制。uint8是选取8位二进制,得到一个十进制数最大到255
注意 16进制也同理,有的选取8位2进制形成一个16进制数 (2A,注意2A是1个16进制数),且16进制数更容易计算,四个二进制一组就可以算对应的16进制。

http://www.xdnf.cn/news/18073.html

相关文章:

  • eChart饼环pie中间显示总数_2个以上0值不挤掉
  • 0815 UDP通信协议TCP并发服务器
  • Mac (三)如何设置环境变量
  • 深入理解 Python 元类中的 __prepare__ 方法:掌控类属性定义顺序的艺术
  • docker镜像解决的一些问题
  • 双重调度(Double Dispatch):《More Effective C++》条款31
  • [Linux] Linux网络管理
  • 16-集合的Stream编程
  • 宋红康 JVM 笔记 Day03|内存结构概述、类加载器与类的加载过程、类加载器分类
  • 深入解析 @nestjs/typeorm的 forRoot 与 forFeature
  • C++面试题及详细答案100道( 31-40 )
  • 算法题Day2
  • Python 类元编程(元类的特殊方法 __prepare__)
  • MixOne:Electron Remote模块的现代化继任者
  • 【低成本扩容】动态扩容实战指南
  • 选择式与生成式超启发算法总结
  • 《设计模式》代理模式
  • 基于Python的电影评论数据分析系统 Python+Django+Vue.js
  • 【运维心得】三步10分钟拆装笔记本键盘
  • Langfuse2.60.3:独立数据库+docker部署及环境变量详细说明
  • 数据清洗处理
  • 【数据结构】深入理解单链表与通讯录项目实现
  • 【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
  • 典型 RAG实现:NFRA智能问答系统实战的总结与反思
  • 数据结构:迭代方法(Iteration)实现树的遍历
  • ubuntu更新chrome版本
  • 平滑方法(smoothing)
  • 零知开源——基于STM32F407VET6的TCS230颜色识别器设计与实现
  • 两个简单的设计模式的例子
  • 【轨物方案】预防性运维:轨物科技用AI+机器人重塑光伏电站价值链