【问题标题】:quick and dirty binary xor function快速而肮脏的二进制异或函数
【发布时间】:2012-10-10 06:30:38
【问题描述】:

嘿我又来了,无情的堆栈溢出之神。

我只是在寻找一种开始使用简单异或哈希函数的方法。由于以太网电缆已神秘地从楼上的路由器上断开(再次),我有点无法访问我常用的资源。我跑题了。

我需要做的是能够将 10 位与二进制字符串中的下 10 位折叠起来,并将 xor 它们相互折叠。所以我在想 伪代码

Raw input = (binary string or S)
Def function xor:
    Find Len of s
    Loop
        [0:9], [10:19] = xorcheck
        Loop 
            Xor [0:] & [10]
        Return result 
    [0 +1:] & [10 + 1:]
Return loop to xorcheck and store the.returned result.            
                       Variable hash ,maybe)
If second [:] return "none"
Divide Len by ten,
If true add "1000000000"
Else Add 0
Check if Len is / 10
if true print hash
Else add 0, check Len /10

基本上,它的轻量级 python 脚本将创建二进制散列。这里有一些我看过的例子,但它们做得太多了,比如输出到十六进制。我真正需要的是函数 xor 二进制字符串并输出结果以及填充整个字符串的方法,因此字符数是十的倍数。

由于我现在正在使用我的微型智能手机进行研究,因此我为质量不佳的问题道歉:'(

编辑更新

我已将 Inspector 的代码编辑为

   my_text = raw_input ()
''.join(bin(ascii)[2:] for ascii in [ord(char) for char in my_text])
def myHash(binary_encoded_ascii):
    answer = 0
    binstr = binary_encoded_ascii + '1'
    binstr += '0'*(20 - (len(bitstr) %20))
    for i in range(len(binstr)/20):
        s = binstr[20*i:20*(i+1)]
        s1,s2 = s[:10], s[10:]
        total += int(s1, 2) ^ int(s2, 2)
        return total
    print total

它似乎要求输入文本,但没有打印任何值。我怎样才能让它输出结果,以便我可以查看它是否真的在做任何事情。

【问题讨论】:

  • 这是格式错误,我深表歉意
  • 学习反引号的方法,再也不会输错!
  • 输入反引号之间的代码(“`”。'1'键的左侧)
  • 另外,hash 是一个相当不错的二进制哈希函数,内置于 Python :)
  • 我试图格式化你的伪代码。请校对

标签: python hash binary


【解决方案1】:

阅读你的作业问题后:

首先,您需要将文本转换为其字符的 ascii 值的二进制编码:

''.join(bin(ascii)[2:] for ascii in [ord(char) for char in my_text])

这将为您提供文本中所有字符的二进制编码 ascii 值,然后您可以将其传递给您的哈希函数

def myHash(binary_encoded_ascii):
    answer = 0
    binstr = binary_encoded_ascii + '1'
    binstr += '0'*(20 - (len(bitstr) %20))
    for i in range(len(binstr)/20):
        s = binstr[20*i:20*(i+1)]
        s1,s2 = s[:10], s[10:]
        answer += int(s1, 2) ^ int(s2, 2)
    return answer

【讨论】:

  • 我现在只是看一下代码,它返回一个“在函数 xorfunction 第 7 行之外返回”,我将稍微摆弄一下。所以基本上我需要它做的是从一个十位二进制块中的每个位与下一个十位块的相应位进行异或。此后,需要填充整个字符串,以便它可以被十整除。但它至少需要填充一位。这是一个简单的哈希,但这就是作业问题的要求。
  • 修复了return 错误。如果您可以发布必须实现的算法的链接,我可以看看。本质上,“下一个 10 位块”是什么意思?如果我有字符串 abcdefghijklmnopqrst,那么 10 位块是 "abcdefghij" and "klmnopqrst" 还是其他?
  • 不再返回错误,而且也没有返回值! ^^ 它不喜欢函数内部的原始输入,所以我移到函数调用之前,所以输入将被设置为全局变量(这是正确的术语)......但我想我可能需要改变它如何/在哪里返回它在循环中找到的内容。
  • 好吧,例如,我将输入“ 1111010111 1100111001 1010010110 1100100011 0000010011 0000010011 0011011001 111111010101010101010111110100 10100100 10100100111111111111110111011101110101011101111111111111110111011101010101010001000100100 00011010111011101100010001000100010001000100000 000100000000000000000号等等。然后需要存储和输出这些值。
  • @Anaryl: 你用的是哪个版本的python? py2k 不应该关心raw_input 的位置。另外,如果你把raw_input放在函数外面,也可以作为参数传递
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
相关资源
最近更新 更多