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

查看字节真实二进制形式示例解析2

在这里插入图片描述

查看字节的真实二进制形式?

若需要显式查看二进制0/1,可以通过以下方法转换:

方法2:使用格式化函数

bytes_data = "你好".encode("utf-8")  # b'\xe4\xbd\xa0\xe5\xa5\xbd'
binary_str = ' '.join(f'{byte:08b}' for byte in bytes_data)
print(binary_str)
# 输出: 11100100 10111101 10100000 11100101 10100101 10111101

代码功能

字节流(bytes) 转换为一个字符串,其中每个字节用 8 位二进制字符串 表示,各二进制字符串之间用空格分隔。
示例

bytes_data = b'\xe4\xbd'  # 字节流包含两个字节:0xe4 (228), 0xbd (189)
binary_str = ' '.join(f'{byte:08b}' for byte in bytes_data)
print(binary_str)  # 输出: 11100100 10111101

逐层解析

1. for byte in bytes_data
  • 作用:遍历字节流 bytes_data 中的每个字节。
  • 关键点
    • bytes_databytes 类型对象(如 b'\xe4\xbd')。
    • byte 是每个字节对应的 整数(范围 0~255)。
    • 示例:
      bytes_data = b'\xe4\xbd'  # 0xe4 → 228, 0xbd → 189
      for byte in bytes_data:print(byte)
      # 输出: 228 → 189
      
2. f'{byte:08b}'
  • 作用:将整数 byte 格式化为 8 位二进制字符串,不足 8 位时左侧补零。
  • 格式化语法解析
    符号含义
    08总宽度为 8 位,不足时左侧补零。
    b将整数转换为二进制字符串(默认不带前导 0b)。
  • 示例
    byte = 228
    print(f'{byte:08b}')  # 输出: 11100100(228 的二进制)byte = 3
    print(f'{byte:08b}')  # 输出: 00000011(补零到 8 位)
    
3. ' '.join(...)
  • 作用:将生成器表达式的结果用空格拼接成一个字符串。
  • 关键点
    • 生成器表达式 (f'{byte:08b}' for byte in bytes_data) 会按需生成每个字节的二进制字符串。
    • join 方法将这些字符串用空格连接。
  • 示例
    binaries = ['11100100', '10111101']
    ' '.join(binaries)  # 输出: '11100100 10111101'
    

完整执行流程

bytes_data = b'\xe4\xbd' 为例:

  1. 遍历字节流

    • 第一个字节 0xe4 → 十进制 228
    • 第二个字节 0xbd → 十进制 189
  2. 格式化每个字节

    • 22811100100f'{228:08b}')。
    • 18910111101f'{189:08b}')。
  3. 拼接结果

    '11100100' + ' ' + '10111101''11100100 10111101'
    

对比其他方法

传统方式(列表推导式 + bin()
binary_str = ' '.join([bin(byte)[2:].zfill(8) for byte in bytes_data])
  • 需要手动去除 bin() 生成的 0b 前缀([2:])。
  • 需要补零(.zfill(8))。
  • 缺点:代码冗长,效率略低。
推荐方式(f-string 格式化)
binary_str = ' '.join(f'{byte:08b}' for byte in bytes_data)
  • 直接通过格式规范一步完成补零和二进制转换。
  • 优点:简洁高效,可读性强。

边界情况处理

1. 字节值为 0
bytes_data = b'\x00'  # 0 → 00000000
binary_str = ' '.join(f'{byte:08b}' for byte in bytes_data)
print(binary_str)  # 输出: 00000000
2. 字节值为 255(最大值)
bytes_data = b'\xff'  # 255 → 11111111
binary_str = ' '.join(f'{byte:08b}' for byte in bytes_data)
print(binary_str)  # 输出: 11111111

总结

代码作用
for byte in bytes_data遍历字节流中的每个字节(整数形式)
f'{byte:08b}'将整数格式化为 8 位二进制字符串
' '.join(...)将二进制字符串用空格拼接成最终结果

通过这行代码,可以高效地将字节流转换为人类可读的二进制字符串形式,便于调试或分析二进制数据。

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

相关文章:

  • 《探秘光纤通信:多模光纤和单模光纤的区别》
  • Logistics | 供应链物流术语
  • 【js】JavaScript的变量提升、函数声明提升
  • ANTsPy:医学影像处理python库
  • Python继承
  • Java 异常处理之 BufferOverflowException(BufferOverflowException 概述、常见发生场景、避免策略)
  • 效法自然--让“存在”代替“价值”
  • DeepSearch:字节新一代 DeerFlow 框架
  • 9. 表的内连和外连
  • Linux | Linux系统安装虚拟机教程(超级简单)
  • Hashmap 和 map的区别
  • 入门消息队列
  • ProceedingJoinPoint的认识
  • 机器学习分类
  • AM1.5G太阳光模拟器参数
  • DeepSeek推理优化技巧:提升速度与降低成本
  • 代码随想录算法训练营第四十一天
  • 【Pandas】pandas DataFrame eval
  • STM32 DMA技术深度解析:从原理到实战应用讲解
  • 激光雷达视觉定位是3D视觉定位吗?
  • GCC 使用说明
  • 专项智能练习(定义判断)_DA_01
  • 案例:塔能精准能耗节能技术,驱动工厂智能变革
  • 异步日志系统01——日志系统框架
  • 扬州卓韵酒店用品:优质洗浴用品,提升酒店满意度与品牌形象
  • 应用BERT-GCN跨模态情绪分析:贸易缓和与金价波动的AI归因
  • OpenCV CUDA模块中矩阵操作------范数(Norm)相关函数
  • 面试题:介绍一下JAVA中的反射机制
  • Springboot考研信息平台
  • 25.第二阶段x64游戏实战-分析物品相关数据