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
相关产品推荐
相关产品推荐

