Я пытаюсь перенести следующий код 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).