c# - 如何在Python中将字符串转换为16位无符号整数?

标签 c# python encoding

我目前正在研究 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 中的结果为

33
32
137
0
103
0
69
120

到目前为止,我对这个 C# 代码没有任何问题,但是当我尝试在 python 中执行相同操作时,我无法获得与 C# 代码相同的结果。我的Python代码如下:

from textwrap import wrap
import struct

values = "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() 但结果仍然不同。如何在 python 中实现 C# 所做的事情?

感谢并感谢任何人可以提供帮助!

最佳答案

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

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

希望对您有帮助!

关于c# - 如何在Python中将字符串转换为16位无符号整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58228485/

相关文章:

c# - C++ 到 C# : cin to Console. 读取

c# - 强制使用 ADO.NET Entity Framework 的存储过程

python - 在Python中更改目录,不起作用

php - 通过 HTML 表单发布 XML

c# - 将字节数组转换为任何基数

c# - Entity Framework TPT 继承子类型

c# - 计算二进制文件中字节模式的出现次数

python - Django RequestFactory 添加 HTTP_X_FORWARDED_FOR

python - 如何使用 pyproj 在 python 中将纬度/经度转换为 UTM?

http - Web 服务器如何知道发布给它们的表单中使用的字符集?