Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Python 字节字符串转换为长值_Python_String_Python 2.7_Bytearray - Fatal编程技术网

Python 字节字符串转换为长值

Python 字节字符串转换为长值,python,string,python-2.7,bytearray,Python,String,Python 2.7,Bytearray,长值的字节字符串: 我有一个十六进制值的字符串,比如,',ff,fe,d0,ea',如何将它们转换为(大端)长值?代码段: dataStr = ',ff,fe,d0,ea' dataVal = struct.unpack('>l', '\xff\xfe\xd0\xea')[0] print dataStr, ' = ', dataVal # prints out ,ff,fe,d0,ea = -77590 我认为\是一个无法打印的字符,所以我相信我的问题是(给定代码片段),

长值的字节字符串:

我有一个十六进制值的字符串,比如,',ff,fe,d0,ea',如何将它们转换为(大端)长值?代码段:

dataStr = ',ff,fe,d0,ea'
dataVal = struct.unpack('>l', '\xff\xfe\xd0\xea')[0]
print dataStr, ' = ', dataVal      # prints out ,ff,fe,d0,ea  =  -77590

我认为
\
是一个无法打印的字符,所以我相信我的问题是(给定代码片段),如何将
、ff、fe、d0、ea
转换为
\xff\xfe\xd0\xea
?或者任何适合于
结构解压缩功能的数组值?

以下将
',ff,fe,d0,ea'
解码为
'\xff\xfe\xd0\xea'

dataStr = ',ff,fe,d0,ea'.replace(',', r'\x').decode('string-escape')

以下代码将把
',ff,fe,d0,ea'
解码为
'\xff\xfe\xd0\xea'

dataStr = ',ff,fe,d0,ea'.replace(',', r'\x').decode('string-escape')

下面是一行代码,它将转换为适合解包的十六进制字符串

hexstr = "".join([chr(int(ss, 16)) for ss in dataStr.split(",") if ss])
通常,当您有这样的十六进制字符串时,您真正想要的是一个无符号整数。因此,要使用unpack实现这一点,请执行以下操作:

myval = struct.unpack(">I", hexstr)[0]
现在,结果是4294889706

但是在第一行中,你已经有了整数,所以你也可以自己移位和运算。这是你可以做到的

res = 0
for v in [int(ss, 16) for ss in dataStr.split(",") if ss]:
   res <<= 8
   res += v
res=0
对于v in[int(ss,16)对于dataStr.split中的ss(“,”)如果ss]:

res这是一行代码,它将转换为适合解包的十六进制字符串

hexstr = "".join([chr(int(ss, 16)) for ss in dataStr.split(",") if ss])
通常,当您有这样的十六进制字符串时,您真正想要的是一个无符号整数。因此,要使用unpack实现这一点,请执行以下操作:

myval = struct.unpack(">I", hexstr)[0]
现在,结果是4294889706

但是在第一行中,你已经有了整数,所以你也可以自己移位和运算。这是你可以做到的

res = 0
for v in [int(ss, 16) for ss in dataStr.split(",") if ss]:
   res <<= 8
   res += v
res=0
对于v in[int(ss,16)对于dataStr.split中的ss(“,”)如果ss]:
物件