получая длинный шестнадцатеричный хеш - PullRequest
1 голос
/ 22 сентября 2019

Как я могу преобразовать этот код Python в R?

import hashlib

def str_buckets(a, b, buckets):
  return (int(hashlib.md5(str(a + ',' + b).encode('utf-8')).hexdigest(), 16) & 4294967295) % buckets

Я могу написать

hashlib.md5(b'x,y').hexdigest()

в

digest::digest("x,y", algo="md5", serialize=FALSE)

оба они даютme вывод f10bc3c94b77e1d6b9f98106daf335c1

НО в python

int(hashlib.md5(b'x,y').hexdigest(), 16)

выводит 320405033267698290319193645506345776577

есть ли R, эквивалентный python '* int(<>, 16)?

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Как предлагается в комментариях, R не имеет встроенной способности обрабатывать большие целые числа (только 32-битные).Это даст правильный ответ:

d <- digest::digest("x,y", algo="md5", serialize=FALSE)
library(Rmpfr)
m <- mpfr(d,precBits=200,base=16)
## 1 'mpfr' number of precision  200   bits 
## [1] 320405033267698290319193645506345776577

, но дальнейшая работа с этим в R может быть сложной.Я даже не нашел способ получить строковый эквивалент, который был бы чище, чем:

gsub("\\.0+$","",format(m))
## [1] "320405033267698290319193645506345776577"

Для установки пакета Rmpfr потребуется установить MPFR и GMP.

0 голосов
/ 23 сентября 2019

Разве as.hexmode() не то, что вам нужно?

https://stat.ethz.ch/R-manual/R-devel/library/base/html/hexmode.html

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