Python 像 PHP 一样解压
Python unpack like in PHP
在PHP
我会这样做:
$res = unpack('C*', "string");
而 $res
变量将是一个大小为 6 的数组:
Array ( [1] => 115 [2] => 116 [3] => 114 [4] => 105 [5] => 110 [6] => 103 )
我想在 Python
中使用同样的技巧。我试过这个:
>>> from struct import unpack
>>> unpack("s","string")
但在这种情况下我得到一个错误:
struct.error: unpack requires a string argument of length 1
我只是想知道 - 如果 "s" 格式代表字符串,为什么长度为 1?我怎样才能实现同样的事情,比如 PHP?
那是因为struct.unpack
格式s
表示"a string"。默认情况下它是一个 1 个字符的字符串,否则你必须指定长度,例如10s
对于 10 个字符的字符串。
无论如何,Python 字符串已经表现得像不可变的字符数组,因此您可以执行 s[3]
并获得第 4 个(从零开始)字符。如果你需要明确地将字符串分解成字典(类似于 PHP 关联数组),你可以这样做:
s = dict(enumerate("string"))
但我强烈建议不要这样做。
在PHP
我会这样做:
$res = unpack('C*', "string");
而 $res
变量将是一个大小为 6 的数组:
Array ( [1] => 115 [2] => 116 [3] => 114 [4] => 105 [5] => 110 [6] => 103 )
我想在 Python
中使用同样的技巧。我试过这个:
>>> from struct import unpack
>>> unpack("s","string")
但在这种情况下我得到一个错误:
struct.error: unpack requires a string argument of length 1
我只是想知道 - 如果 "s" 格式代表字符串,为什么长度为 1?我怎样才能实现同样的事情,比如 PHP?
那是因为struct.unpack
格式s
表示"a string"。默认情况下它是一个 1 个字符的字符串,否则你必须指定长度,例如10s
对于 10 个字符的字符串。
无论如何,Python 字符串已经表现得像不可变的字符数组,因此您可以执行 s[3]
并获得第 4 个(从零开始)字符。如果你需要明确地将字符串分解成字典(类似于 PHP 关联数组),你可以这样做:
s = dict(enumerate("string"))
但我强烈建议不要这样做。