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

计算机是如何看待数据的?

一、计算机如何“看待”数据?

  1. 物理层本质

    • 计算机的所有数据最终以二进制(0和1)在电路中表示(高电平=1,低电平=0)。

    • 无论你用何种进制描述数据(如十六进制 0xA1 或十进制 161),存入内存时都会被转换为二进制 10100001

  2. 进制是人类的抽象工具

    • 二进制:直接对应硬件状态,但冗长难读(如 1010101111001101)。

    • 十六进制:每4位二进制对应1位十六进制,更简洁(如 ABCD 表示 1010101111001101)。

    • 十进制:日常使用,但与二进制无直接映射。


二、报文中的进制表示

1. 报文在传输中的真实形态
  • 网络传输:数据以二进制比特流形式通过物理介质(如网线、光纤)传输。

  • 存储:报文被记录为二进制文件(如 .pcap 抓包文件)。

2. 为何文档常用十六进制表示报文?
  • 可读性:十六进制更紧凑,便于人类阅读和调试。

    • 示例:

      • 二进制:01111011 10101010 00110011

      • 十六进制:7B AA 33

  • 与字节对齐:1字节=8位二进制=2位十六进制(如 0xFF=1字节)。

3. 工具中的进制显示
  • Wireshark:默认以十六进制展示报文内容,但支持切换为二进制视图。

  • 编程语言:可通过代码按需以不同进制操作数据。

    data = b'\x12\x34'  # 十六进制表示字节
    print(data.hex())    # 输出 "1234"
    print(bin(0x12))     # 输出 "0b10010"(二进制)

三、计算机如何处理不同进制?

  1. 输入与转换

    • 当你在代码中写入 0xA1(十六进制)或 0b10100001(二进制),编译器/解释器会自动将其转换为二进制存储。

    • 示例(Python):

      value = 0xA1      # 十六进制赋值
      print(value)      # 输出十进制 161
      print(bin(value)) # 输出二进制 0b10100001
  2. 网络协议中的字段定义

    • 协议标准(如RFC)中,字段长度和值通常以位(bit)或字节(byte)定义。

    • 例如,UDP头部中的“校验和”字段为16位(2字节),无论用十六进制 0x4618 还是二进制 0100011000011000 表示,实际传输时都是2字节的二进制数据。


四、常见误区澄清

误区1:计算机能自动判断数据进制
  • 事实:计算机需要明确的进制标识符(如 0x 表示十六进制、0b 表示二进制)来解析数据。若未指定,默认按十进制处理。

误区2:报文默认以十六进制传输
  • 事实:报文始终以二进制传输,十六进制仅用于人类可读的表示形式。

误区3:进制转换影响性能
  • 事实:进制转换是逻辑层面的操作(如 0xA1 → 10100001),对硬件性能无影响。


五、实践验证

实验1:用Python观察进制转换
# 定义不同进制的相同值
hex_val = 0xA1      # 十六进制
bin_val = 0b10100001 # 二进制
dec_val = 161        # 十进制print(hex_val == bin_val == dec_val)  # 输出 True(值相同)
print(bytes([hex_val]))              # 输出 b'\xa1'(字节形式)
实验2:Wireshark查看真实报文
  1. 抓取一个DNS查询(UDP协议)。

  2. 选中UDP头部,右键 → Show Packet Bytes

  3. 观察原始二进制数据(十六进制形式显示)。


六、总结

  • 计算机本质:所有数据以二进制存储和处理。

  • 进制角色:十六进制是人类的“缩写工具”,用于简化二进制读写。

  • 协议与工具:报文传输用二进制,文档和工具用十六进制辅助分析。

学习建议:通过编程和抓包工具(如Wireshark)直接操作二进制/十六进制数据,能快速跨越抽象理论与实际应用的鸿沟。

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

相关文章:

  • Java之封装(学习笔记)
  • 算法分析传输加密数据格式密文存储代码混淆逆向保护
  • 4.19-4.20学习总结 网络编程+反射+动态代理
  • AI大模型发展现状与MCP协议诞生的技术演进
  • music21:伍佰 《挪威的森林》MIDI 音乐分析
  • Centos9 离线安装 MYSQL8
  • 【python编程从入门到到实践】第四章 操作列表
  • 进程控制(linux+C/C++)
  • day47——平方数之和(LeetCode-633)
  • javase 学习
  • SQL语句执行顺序
  • QML Universal样式
  • 在 Debian 12 中恢复被删除的 smb.conf 配置文件
  • Python基础总结(八)之循环语句
  • 【RabbitMQ | 第2篇】RabbitMQ 控制台实现消息路由 + 数据隔离
  • 本地化部署ASR服务程序:以FastASR为例
  • 使用 NEAT 进化智能体解决 Gymnasium 强化学习环境
  • 通过 WebSocket 接收和播放 WSS 协议视频流
  • Transformers是一种基于自注意力机制的神经网络模型
  • 王博:影视领域的多元创作先锋,以卓越才华开启新篇章
  • Java——类和对象
  • Nacos深度剖析与实践应用之-配置中心
  • RenderStage::drawInner
  • Vue如何实现样式隔离
  • 【Python笔记 01】变量、标识符
  • C++每周一篇
  • 零点、驻点、拐点、极值点、最值点的定义、几何意义、求解方法
  • MACOS 中聚焦使用技巧
  • 云效部署实现Java项目自动化部署图解
  • 基于SpringBoot+Vue实现的旅游景点预约平台功能一