Портирование функции scala на C ++ - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь перенести следующий код scala на c ++

Scala код:


def getLong(bytes: Array[Byte]): Long = {
    //MessageDigest.getInstance("MD5")
    val hash = messageDigest.get().digest(bytes)

    val str = messageDigest.get().digest(bytes).map(_.toChar).mkString("")

    val bb = ByteBuffer.wrap(hash)
    bb.order(ByteOrder.LITTLE_ENDIAN)
    val number: Long = bb.getInt & 0xffffffffL 

    number
  }

C ++ код:

unsigned long get_long(string key) {

    unsigned long n = key.length();

    unsigned char* uchrs = reinterpret_cast<unsigned char*>(const_cast<char*>(key.c_str()));
    unsigned char outbuf[MD5_DIGEST_LENGTH];
    MD5(uchrs, n, outbuf);

    unsigned long number = *((unsigned long*)outbuf);

    return number;

}

Когда я вызываю функцию с этим входом, которая выдает разные выходные значения, кто-нибудь знает, что я делаю неправильно?

Пример:

getLong("158750493953113325943f6e61350d949848bd2877f97aee4b6".getBytes) => 2384178603 

get_long("158750493953113325943f6e61350d949848bd2877f97aee4b6") => 15019855082967248299

Я пробовал что-то подобное в коде c ++:

int num_int = number  & INT_MAX & 0xffffffff;

это не помогает (возвращает другое значение 236694955).

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