python int转换为byte_求 Python 中 int 转 bytes 最简/高效写法

JCZ2MkKb5S8ZX9pq

253 天前

@imn1

的确你说的没错。用于校验的话,另几种算法结果是有问题的。

---

for i in range(10):

j = str(i).encode()

i = pd.Series([i]).astype('bytes').tolist()[0]

k = binascii.crc32(j)

print(f'{type(i)} {i} -> {type(j)} {j} | {k}')

0 -> b'0' | 4108050209

1 -> b'1' | 2212294583

2 -> b'2' | 450215437

3 -> b'3' | 1842515611

4 -> b'4' | 4088798008

5 -> b'5' | 2226203566

6 -> b'6' | 498629140

7 -> b'7' | 1790921346

8 -> b'8' | 4194326291

9 -> b'9' | 2366072709

---

@lxy42

j = struct.pack('i', i)

0 -> b'\x00\x00\x00\x00' | 558161692

1 -> b'\x01\x00\x00\x00' | 2583214201

2 -> b'\x02\x00\x00\x00' | 2337085335

3 -> b'\x03\x00\x00\x00' | 871461106

4 -> b'\x04\x00\x00\x00' | 2921744459

5 -> b'\x05\x00\x00\x00' | 379203374

6 -> b'\x06\x00\x00\x00' | 70222016

7 -> b'\x07\x00\x00\x00' | 3163809701

8 -> b'\x08\x00\x00\x00' | 3840997363

9 -> b'\t\x00\x00\x00' | 1548521622

---

@keepeye bytearray 出来的结果是 class 'bytearray',所以我改了下。

j = bytes([i])

0 -> b'\x00' | 3523407757

1 -> b'\x01' | 2768625435

2 -> b'\x02' | 1007455905

3 -> b'\x03' | 1259060791

4 -> b'\x04' | 3580832660

5 -> b'\x05' | 2724731650

6 -> b'\x06' | 996231864

7 -> b'\x07' | 1281784366

8 -> b'\x08' | 3705235391

9 -> b'\t' | 2883475241

---

@wuwukai007 pandas 的方法,结果是正确的,就是圈子兜得也略有点大。

j = pd.Series([i]).astype('bytes').tolist()[0]

0 -> b'0' | 4108050209

1 -> b'1' | 2212294583

2 -> b'2' | 450215437

3 -> b'3' | 1842515611

4 -> b'4' | 4088798008

5 -> b'5' | 2226203566

6 -> b'6' | 498629140

7 -> b'7' | 1790921346

8 -> b'8' | 4194326291

9 -> b'9' | 2366072709

---

@ysc3839 to_bytes 我一开始试了,有个长度参数的问题,没想好怎么处理。另外它输出的结果好像也是 b'\x00\x01'这类的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值