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

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

文件其实都是电信号,没有真正的 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.dtcms.com/a/334595.html

相关文章:

  • PHP域名授权系统网站源码_授权管理工单系统_精美UI_附教程
  • RK3568 NPU RKNN(一):概念理清
  • 从通用到专业:大模型训练的两条路与遗忘难题
  • 【原理】C# 字段、属性对比及其底层实现
  • 手机版碰一碰发视频系统批量剪辑功能开发,支持OEM贴牌
  • 编写和运行 Playbook
  • 31 HTB Union 机器 - 中等难度
  • Java设计模式之《工厂模式》
  • DAY12DAY13-新世纪DL(Deeplearning/深度学习)战士:破(改善神经网络)1
  • 嵌入式硬件篇---常见的单片机型号
  • ​进程与线程(线程)
  • 【JavaEE】多线程 -- 线程等待wait和notify
  • 对话访谈|盘古信息×智晟威:深度挖掘数字化转型的奥秘
  • 【数据结构】深入理解单链表与通讯录项目实现
  • git revert
  • Java Condition 对象 wait 方法使用与修复方案
  • 云计算-Kubernetes+Istio 实现金丝雀发布:流量管理、熔断、流量镜像、ingreess、污点及pv案例实战
  • 如何防止 RabbitMQ 的消息丢失?如何保证消息的可靠传输?
  • Python 项目高频设计模式实战指南:从理念到落地的全景剖析
  • Linux软件编程--线程
  • 蓝牙音频ANC四通道测试解决方案
  • 新经济形态下人才能力结构变革与发展研究报告
  • Win10快速安装.NET3.5
  • RecSys:多目标模型和MMOE
  • .NET8下的Garnet使用
  • androidstudio内存大小配置
  • 研究生第十六周周报
  • 718SJBH公交查询系统
  • 4.6 Vue 3 中的模板引用 (Template Refs)
  • Sklearn 机器学习 邮件文本分类 加载邮件数据