molinchz 发表于 2021-11-15 11:04

pytho进制转换的问题

请大佬帮忙 看下
ybnum = 360
print(hex(ybnum))   # 转换为十六进制
# 数量二个字节高低位交换
data_byte1 = ybnum.to_bytes(length=2, byteorder='little', signed=True)
print(data_byte1)
print(type(data_byte1))
得到结果 很奇怪:0x168b'h\x01'<class 'bytes'>
怎么变成 h 了,这个怎样把 h 还原 68啊 ,不是就是length 参数能不能搞成变量,这样ybunm 可以二字节的长度,要怎样写,谢谢

pzx521521 发表于 2021-11-15 13:44

本帖最后由 pzx521521 于 2021-11-15 13:46 编辑

默认显示成字符串了而已 不用管的, 数值没问题的
h在ascii里面 是104 -> 对应16进制是 68, h本来就是/x68, 或者说/x68就会显示为h
本来是 01 68 高低位变换后是 68 01 十进制就是 26625
最后一句看不懂

molinchz 发表于 2021-11-15 14:20

pzx521521 发表于 2021-11-15 13:44
默认显示成字符串了而已 不用管的, 数值没问题的
h在ascii里面 是104 -> 对应16进制是 68, h本来就是/x68, ...

ybnum = 200
data_byte1 = ybnum.to_bytes(length=2, byteorder='little', signed=True).hex()
print(data_byte1)
print(type(data_byte1))
a1 = data_byte1.encode(encoding="utf-8")
print(a1)
我改这样,就可以了,但a1是结果是 b'c800'   怎样把它变成    b'\xc8\x00'   ,因为我要写入.bin文件 里

geyee 发表于 2021-11-15 14:31

十进制数360转换为十六进制表示为0x0168。大端字节序为01 68,小端则为68 01。字母h的ascii码为104,即0x68,hex(ord('h'))可返回。print("b'\x68")返回b'h。
import math
data_byte1 = ybnum.to_bytes(math.ceil(ybnum.bit_length()/8),byteorder='little', signed=True)

pzx521521 发表于 2021-11-15 14:36

不要.hex() 不要 encoding="utf-8"
你看到的b'c800' 和计算机看到b'\xc8\x00'不是一个东西
ybnum = 200
data_byte1 = ybnum.to_bytes(length=2, byteorder='little', signed=True)
这样出来的就是   b'\xc8\x00'
'h\x01' 和 \x68\x01 是等价的原因上面说了   print 会把\x68 翻译成h, 因为h对应的编码ascii就是\x68   
你可以这样理解:
byte 这个类型可以翻译成数字也可以翻译成 char, print函数会默认翻译成char方便看

molinchz 发表于 2021-11-15 16:34

pzx521521 发表于 2021-11-15 14:36
不要.hex() 不要 encoding="utf-8"
你看到的b'c800' 和计算机看到b'\xc8\x00'不是一个东西
ybnum = 200


老师,你是对的,确实如你所说,很感谢 ,昨天 搞了一天,原来是显示 的问题,真正写入编码是对的
页: [1]
查看完整版本: pytho进制转换的问题