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

Python将日期转换为等值十六进制生成bytearray报错求助

问题原因

你遇到的报错核心原因是自定义的hexConvert函数返回值为字符串类型:hex()方法生成的结果是类似"0x12"的字符串,不是整数,而bytearray要求传入的列表元素必须是0~255区间的整数,因此触发了类型错误。

同时你写的转换逻辑完全冗余,datetime对象取出的年、月、日、时、分、秒本身就是整数,不需要做字符串转十六进制再转回整数的多余操作。

解决方法

根据你给出的示例对应关系(12日对应0x12、10点对应0x10),你需要的是将十进制的日期值转为BCD编码(也就是把十进制数字的每一位直接作为十六进制的位),修改后代码如下:

import sys
import asyncio
import platform

from bleak import BleakClient
from datetime import datetime

def dec_to_bcd(num):
    # 十进制数值转对应字面量的BCD十六进制值
    return (num // 10) * 16 + (num % 10)

# 获取本地日期时间
local_dt = datetime.now()

date_day = dec_to_bcd(local_dt.day)
date_month = dec_to_bcd(local_dt.month)
date_year = dec_to_bcd(local_dt.year - 2000)
date_hour = dec_to_bcd(local_dt.hour)
date_minute = dec_to_bcd(local_dt.minute)
date_second = dec_to_bcd(local_dt.second)

# 验证输出,打印出来的就是你需要的0x开头的格式
print(hex(date_day), hex(date_month), hex(date_year), hex(date_hour), hex(date_minute), hex(date_second))

DateTime = bytearray([date_day, date_month, date_year, date_hour, date_minute, date_second])

如果你不需要BCD编码,只是要把日期数值本身直接存入bytearray,直接用datetime取到的整数值即可,连转换函数都不需要:

date_day = local_dt.day
date_month = local_dt.month
date_year = local_dt.year - 2000
date_hour = local_dt.hour
date_minute = local_dt.minute
date_second = local_dt.second
DateTime = bytearray([date_day, date_month, date_year, date_hour, date_minute, date_second])

内容的提问来源于stack exchange,提问作者Rifet Gazdic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:15:08