Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在python中从字符串转换为16位无符号整数?_C#_Python_Encoding - Fatal编程技术网

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

C# 如何在python中从字符串转换为16位无符号整数?,c#,python,encoding,C#,Python,Encoding,我目前正在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: val

我目前正在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)))
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-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);
}
到目前为止,我对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)))
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'
在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)))
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中所做的工作


感谢并感谢任何人的帮助

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

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

希望有帮助

我不清楚转换
21
如何导致
33
(或任何其他假定的“正确”转换)。请回答您的问题,并更好地解释如何将2个整数打包成1组,然后将其转换成一个字节。@martineau将2个整数打包成1组是因为在消除字符串中的
-
后,这些数字将粘在一起,我希望将它们转换成uint,作为它们的原始对,即21,20,89而不是2,1,2,0,8,9。。。对于转换,参数为16的方法
Convert.ToBytes
意味着将数字从基数16转换为基数10。您好,是的!!非常感谢你!!