|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我用hex(4565) ,得到 16进制 11d5 ,但存放的是 d5 11, 也就是高低位交换了,而且python 里面比如 hex(2016 ) 得到是0x7e0 ,高位的07 转成7了 ,这样的,存放到 .cis 文件 中0x7 还能 是07吗?要补码操作吗,高低位交换是分离在合成 , 根本大神给的方法和我网上查到后,测试结果 发现 代码如下
ybnum = 99
print(hex(ybnum)) # 转换为十六进制
# 数量二个字节高低位交换
data_byte1 = ybnum.to_bytes(length=2, byteorder='little', signed=True)
print(data_byte1)
得到的结果很奇怪:
0x63
b'c\x00'
如果 是4565 这个数就是对,其它的好些个有变。
查到这个to_bytes 是参数范围是0到255 ,我有点不知怎么搞了,请大神帮忙 看下
你不用管hex的返回值是什么,它的返回值是一个字符串,只是给人看的,如果前缀是0他会将0省去(毕竟只是给人看的),其返回值只能用来参考数据以大端模式时候的大致样子。
关键是to_bytes的返回值,毕竟它返回的字节码是要被你写入文件中的,跟hex没半点关系。
- ybnum = 99
- # print(hex(ybnum)) # 转换为十六进制
- # 数量二个字节高低位交换 x
- # 不能理解成高低位交换,只能说是生成小端模式顺序的字节码(byteorder="big"就生成大端模式顺序的)
- # 比较一般x86_64的个人PC,数据都是以小端模式储存的,你改变不了它
- data_byte1 = ybnum.to_bytes(length=2, byteorder="little", signed=True)
- print(data_byte1)
- # b"c\x00" 和 b"\x63\x00"是相等的,\x63显示成c只是因为\x63刚好对应c的
- # ascii码python将其显示成c给你看(个人认为这点不好,我并不想看\x63是什么字母)
- print(data_byte1 == b"\x63\x00")
- print((2016).to_bytes(2, "big")) # 生成大端模式顺序的字节码 b'\x07\xe0'
复制代码
|
|