【问题标题】:python data type after bitwise operation (from c language)按位运算后的python数据类型(来自c语言)
【发布时间】:2019-11-08 21:54:43
【问题描述】:

我一直在尝试将其中一种方法从散列夸克转换为原来的c语言,我试图将其更改为python,该方法用于显示哈希的当前状态,我发现了一个问题我的输出,pytho one,只给出二进制输出,而我期望的输出是二进制以外的所有输出,我如何转换它?还是有其他方法可以操纵它?

python 代码

def showstate(x):
    i = 0
    buf = 0
    width = 17
    #print (x)

    while i < 8 * width:
        buf ^= (1 & x[i] << (7 - (i%8)))

        #my_hex = buf.decode('hex')

        #print ("%d"%buf, end = '')
        if  (((i%8) == 7) and (i)):
            #print (" ".join(hex(ord(n)) for n in buf))
            #a = int(str(buf), 2)
            #print(a)
            print("%02x"%buf, end = '')
            buf = 0
        i += 1

    #print(x)
     #print ("/n") 

python 输出

ENTER PERMUTE
0000000001000101000100010001010100
PERMUTE DONE
0000000001000101010100000100010101
EXTRACTED ONE BYTE

ENTER PERMUTE
0000000001000101010100000100010101
PERMUTE DONE
0000000001000101010100000101000100
EXTRACTED ONE BYTE

来自 c 的代码

void showstate( u32 * x ) {

  int i;
  u8 buf=0;
  for(i=0;i<8*WIDTH;++i) {
    buf ^= (1&x[i])<<(7-(i%8));
      /*printf("%d",buf);*/
    if (((i%8)==7) && (i)) {
      printf("%02x",buf); /*panjang nya 2 digit, kalau cuma satu digit diisi 0 */
      buf=0;
    }
  }
  printf("\n");
  printf("%d", buf);
  printf("\n");

}

c 的输出是正确的,其中输出具有固定长度的值和随机数

谢谢大家

【问题讨论】:

  • 那么到底是什么问题呢?因为那个输出根本不匹配你的python代码。
  • @FHTMitchell 我希望输出不是二进制,包含十六进制的字符串会很棒

标签: python c hash binary bit-manipulation


【解决方案1】:

从 C 到 Python 的转换出现错误 - C 行

    buf ^= (1&x[i])<<(7-(i%8));

已翻译成Python行

    buf ^= (1 & x[i] << (7 - (i%8)))

括号放错了。 C 行应该按原样复制,只是删除 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多