You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数字binary类型索引取值疑问:b'1'[0]为49、b'2'[0]为50的原因是什么

结果原因

你操作的b'1'属于Python的**字节串(bytes)**类型,出现认知偏差的核心是混淆了「字符的字节编码」和「数值的二进制表示」:

  • b''语法生成的字节串,括号内的'1'、'2'是字符而非数值,Python会默认按ASCII编码规则将其转换为对应的字节值
  • 对bytes对象执行单下标索引时,返回的是对应位置字节的十进制整数值

字符'1'的ASCII码十进制值为49,对应8位二进制序列是00110001;字符'2'的ASCII码十进制值为50,对应8位二进制序列是00110010。数字字符'0'到'9'的ASCII码十进制范围为4857,对应二进制范围为`00110000`00111001。

如果你需要生成数值本身对应的二进制字节,可使用int.to_bytes()方法,示例如下:

# 生成数值1的单字节大端序二进制表示
num1_byte = (1).to_bytes(length=1, byteorder='big')
print(num1_byte) # 输出 b'\x01'
print(num1_byte[0]) # 输出 1,符合数值对应的预期结果
底层存储规则

bytes对象的每个存储单元都是8位无符号整数,取值范围为0~255,对应固定长度为8比特的二进制序列:

  • 用b'可打印字符'定义时,字符会按照ASCII编码规则映射为对应的8位字节值,仅支持ASCII范围内的字符
  • 用数值转字节的方法定义时,会直接将数值转换为对应的二进制补码序列存储,支持自定义字节序、字节长度等参数

内容的提问来源于stack exchange,提问作者Allen Huang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:57:03