从Python中的字符串中获取x最低有效位

从Python中的字符串中获取x最低有效位,python,string,character-encoding,Python,String,Character Encoding,在Python中,如何从字符串(str)获取x lsb? 具体来说,我有一个256位的字符串,由32个字符组成,每个字符占用1个字节,从中我必须得到一个具有50个最低有效位的“字符”字符串。因此,以下是使用字符串的方法的要素(简单但不是最有效的变体): ord(x)生成字符的数字(即基本上是位)(例如ord('a')=65)。请注意,ord实际需要一个字节长的字符(没有特殊符号,如欧元或类似符号…) bin(x)[2:]创建一个表示二进制数x的字符串 因此,我们可以做(mystr保存您的字符

在Python中,如何从字符串(str)获取x lsb?
具体来说,我有一个256位的字符串,由32个字符组成,每个字符占用1个字节,从中我必须得到一个具有50个最低有效位的“字符”字符串。

因此,以下是使用字符串的方法的要素(简单但不是最有效的变体):

  • ord(x)
    生成字符的数字(即基本上是位)(例如
    ord('a')=65
    )。请注意,
    ord
    实际需要一个字节长的字符(没有特殊符号,如欧元或类似符号…)
  • bin(x)[2:]
    创建一个表示二进制数
    x
    的字符串
因此,我们可以做(
mystr
保存您的字符串):


请注意,这种方法肯定不是最有效的方法,因为繁重的字符串操作可以被纯整数操作(使用位移位等)取代。然而,我想到的是最简单的变体。

下面是使用字符串的方法的要素(简单但不是最有效的变体):

  • ord(x)
    生成字符的数字(即基本上是位)(例如
    ord('a')=65
    )。请注意,
    ord
    实际需要一个字节长的字符(没有特殊符号,如欧元或类似符号…)
  • bin(x)[2:]
    创建一个表示二进制数
    x
    的字符串
因此,我们可以做(
mystr
保存您的字符串):


请注意,这种方法肯定不是最有效的方法,因为繁重的字符串操作可以被纯整数操作(使用位移位等)取代。然而,这是我脑海中想到的最简单的变体。

如果它只是为了显示,对你有帮助吗

  yourString [14:63]
你也可以使用

  yourString [-50:]

有关更多信息,请参见

如果它仅用于显示,是否会对您有所帮助

  yourString [14:63]
你也可以使用

  yourString [-50:]

有关更多信息,请参见

我认为可能的答案是此函数:
mystr
保存我的字符串

def get_lsbs_str(mystr):
    chrlist = list(mystr)
    result1 = [chr(ord(chrlist[-7])&(3))]
    result2 = chrlist[-6:]
    return "".join(result1 + result2)
此函数获取mystr的-7rd字符的2个LSB(这是50个LSB中的2个MSB) 然后取mystr的最后6个字符(50个LSB中的48个LSB)


如果我有错误,请告诉我。

我想可能的答案是这个函数:
mystr
保存我的字符串

def get_lsbs_str(mystr):
    chrlist = list(mystr)
    result1 = [chr(ord(chrlist[-7])&(3))]
    result2 = chrlist[-6:]
    return "".join(result1 + result2)
此函数获取mystr的-7rd字符的2个LSB(这是50个LSB中的2个MSB) 然后取mystr的最后6个字符(50个LSB中的48个LSB)


请让我知道我是否出错。

不确定,您是有一个字符串
“0110100110”
还是有一个由64个字符组成的字符串,每个字符占用8位?我有一个由64个字符组成的字符串,每个字符占用1个字节。作为旁注,这实际上是一个512位字符串(8位/ASCII字符*64个ASCII字符=512位)对不起,字符是32,不是64。32*8位=256位不确定,您是有一个字符串
“0110100110”
还是有一个由64个字符组成的字符串,每个字符占用8位?我有一个由64个字符组成的字符串,每个字符占用1个字节。作为旁注,这实际上是一个512位字符串(8位/ASCII字符*64个ASCII字符=512位)。很抱歉,字符是32个,不是64个。32*8位=256位字节,但如何从最后50位中最终获得字符串?不需要进行位移位,只需按位
使用值
1
(二进制
00000001
),如果LSB为
1
,则返回
1
,或者
0
如果LSB是
0
@dcriello如果您希望最后50位作为字符串,您会注意到50=6*8+2。也就是说,50位对应于6个字符和2个单位。因此,您必须获取最后6个字符(
mystr[-6://code>),并且从最后第七个字符(
mystr[-7]
)中获取最后两位并对其进行处理(
ord(mystr[-7])&0b11从最后第七个字符中提取2位)。谢谢,但是,我最终如何从最后50位中获取字符串呢?不需要进行位移位,只要按位
使用值
1
(二进制
00000001
),如果LSB是
1
,则返回
1
,如果LSB是
0
,则返回
0
,如果希望最后50位作为字符串,你注意到50=6*8+2。也就是说,50位对应于6个字符和2个单位。因此,您必须获取最后6个字符(
mystr[-6://code>),从最后第七个字符(
mystr[-7]
)中获取最后两位并对其进行处理(
ord(mystr[-7])&0b11
从最后第七个字符中提取2位)。
“”
这应该是执行相同任务的单行可选python命令。
这应该是执行相同任务的单行可选python命令