为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 python 中从字符串转换为 16 位无符号整数?

如何在 python 中从字符串转换为 16 位无符号整数?

人到中年有点甜 2022-06-14 15:31:19
我目前正在对python中的字符串进行一些编码和解码。我应该将一些代码从 C# 转换为 python,但是我遇到了一些问题,如下所示:所以现在我有一个看起来像这样的字符串:21-20-89-00-67-00-45-78 代码应该消除-数字之间的中间值,并将 2 个整数打包成 1 个组,然后将它们转换为字节。在 C# 中,它是这样完成的:var value = "21-20-89-00-67-00-45-78";var valueNoDash = value.Replace("-", null);for (var i = 0; i < DataSizeInByte; i++){    //convert every 2 digits into 1 byte    Data[i] = Convert.ToByte(valueNoDash.Substring(i * 2, 2), 16);}上面的代码表示步骤 1:-从字符串中删除,步骤 2:使用 Substring 方法将它们分成 1 组中的 2 位,步骤 3:使用以 16 为底的 Convert.ToByte 将它们转换为 16 位无符号整数。结果Data是33321370103069120到目前为止,我对这个 C# 代码没有任何问题,但是当我尝试在 python 中做同样的事情时,我无法得到与 C# 代码相同的结果。我的python代码如下:from textwrap import wrapimport structvalues = "21-20-89-00-67-00-45-78"values_no_dash = a.replace('-', '')values_grouped = wrap(b, 2)values_list = []for value in values_grouped:    values_list.append(struct.pack('i', int(value)))在 python 中,它给了我十六进制值的字节列表,如下所示:b'\x15\x00\x00\x00'b'\x14\x00\x00\x00'b'Y\x00\x00\x00'b'\x00\x00\x00\x00'b'C\x00\x00\x00'b'\x00\x00\x00\x00'b'-\x00\x00\x00'b'N\x00\x00\x00'这是字节对象,但是当我将此对象转换为十进制时,它给了我与原始字符串完全相同的值:21, 20, 89, 0, 67, 0, 45, 78.这意味着我没有成功转换为 16 位无符号整数,对吗?我怎样才能在python中做到这一点?我已经尝试使用str.encode()但结果仍然不同。我怎样才能实现 C# 在 python 中所做的事情?感谢并感谢任何人可以提供帮助!
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

我认为这是您正在寻找的解决方案:


values = "21-20-89-00-67-00-45-78"

values_no_dash_grouped = values.split('-') #deletes dashes and groups numbers simultaneously 

for value in values_no_dash_grouped:

    print(int(value, 16)) #converts number in base 16 to base 10 and prints it

希望能帮助到你!


查看完整回答
反对 回复 2022-06-14
  • 1 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号