тип данных python после побитовой операции (из языка c) - PullRequest
0 голосов
/ 27 июня 2019

Я пытался преобразовать один из методов из хеш-кварка, который изначально был из языка c, и я пытаюсь изменить его на python, этот метод используется для отображения текущего состояния хэша, и я обнаружил проблему, заключающуюся в том, чтомой вывод, Python один, дает только вывод с двоичным, и вывод, который я ожидал, это все, кроме двоичного, и как мне преобразовать его?или есть какой-то другой способ манипулировать им?

код с 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 является правильным, где выход имеет фиксированную длину значения и случайное число

спасибо, ребята

1 Ответ

0 голосов
/ 27 июня 2019

Ошибка при преобразовании из C в Python - строка C

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

переведено в строку Python

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

, в результате чего скобки были не на месте. Строка C, скорее всего, должна была быть скопирована как есть, просто удалив ;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...