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

Python3.x中创建含组合int16的特定字节对象的技术求助

如何构造目标Python字节对象

首先,我们先明确你要生成的目标字节对象:b"'\x10\x00\x0020180425",拆解后对应的字节序列是:[39, 16, 0, 0, 50, 48, 49, 56, 48, 52, 50, 53](其中39是单引号'的ASCII码)。

你提到前几个字节\x10\x00\x00由两个int16类型数据组合而成——结合目标来看,这应该是指一个大端存储的int16值(0x1000,即十进制2560)加上另一个int16值(0x0000)的高字节,这样组合起来正好是\x10\x00\x00。

下面给你几种简洁可靠的实现方法:

方法1:使用struct模块(推荐)

struct模块专门用于处理Python值与C结构体字节序列的转换,能轻松处理端序问题,代码更简洁:

import struct

# 1. 打包第一个int16(2560,大端格式,对应字节\x10\x00)
int16_part1 = struct.pack('>H', 2560)
# 2. 打包第二个int16(0)并取高字节(对应\x00)
int16_part2 = struct.pack('>H', 0)[0:1]
# 3. 拼接所有部分:单引号 + int16片段 + 字符串字节
target_bytes = b"'" + int16_part1 + int16_part2 + b"20180425"

print(target_bytes)  # 输出:b"'\x10\x00\x0020180425"

如果想更紧凑,也可以合并打包步骤:

import struct

# 打包两个int16,取前3字节,再拼接其他部分
prefix = struct.pack('>HH', 2560, 0)[:3]
target_bytes = b"'" + prefix + b"20180425"

方法2:手动操作bytearray(类似你的原始思路)

如果你更倾向于手动拆分字节,可以修正你的原始代码,注意选择正确的int16值和端序处理:

import numpy as np

# 初始化bytearray,先加入单引号
blebytes = bytearray(b"'")

# 第一个int16:2560(0x1000),大端存储,高字节0x10,低字节0x00
z = np.int16(2560)
blebytes.append((z & 0xFF00) >> 8)  # 取高字节:0x10
blebytes.append(z & 0x00FF)         # 取低字节:0x00

# 第二个int16:0,取高字节0x00
z = np.int16(0)
blebytes.append((z & 0xFF00) >> 8)

# 加入后面的字符串字节
blebytes.extend(b"20180425")

print(bytes(blebytes))  # 输出:b"'\x10\x00\x0020180425"

为什么你的原始代码没成功?

你之前用了np.int16(20)和np.int16(123),这两个值对应的大端字节分别是\x00\x14和\x00\x7B,组合起来是\x00\x14\x00\x7B,显然和目标的\x10\x00\x00不符。核心问题是选择的int16值不对,需要用2560(0x1000)来得到\x10\x00的字节序列。

内容的提问来源于stack exchange,提问作者Simon K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:26:54