Python中的Integer.tohextString

2024-09-28 22:34:46 发布

您现在位置:Python中文网/ 问答频道 /正文

这里有java代码

static String md5(byte[] bArr) {
    MessageDigest instance = MessageDigest.getInstance("MD5");
    instance.update(bArr);
    byte[] digest = instance.digest();
    StringBuffer sb = new StringBuffer();
    for (byte b : digest) {
        sb.append(Integer.toHexString(b & 0xffffffff));
    }
    return sb.toString();
}

打电话给md5("A".getBytes()),我得到了

7fffffffc56270ffffffe7ffffffa7fffffffa81a5935ffffffb72effffffacffffffbe29

如何通过Python实现相同的结果? 我试着用下面的方法

m = hashlib.md5()
m.update(str.encode('utf-8'))
bytes = m.digest()
return ''.join('{:02x}'.format(x) for x in bytes)

我得到

7fc56270e7a70fa81a5935b72eacbe29

这和m.hexdigest()是一样的

编辑: 问题看起来是介于这些“负”字节之间。 例如 在Java中,第二个字节在int中是“-59”,但Python无法识别 第5个字节是“-25”

那些“f”是因为它们是负数


Tags: instance代码forreturn字节bytesupdatejava
1条回答
网友
1楼 · 发布于 2024-09-28 22:34:46

java版本是。。。奇怪的它获取每个字节,将其加宽为一个整数,然后获取整数的补码,并对其进行格式化。这就像一个使有符号字节无符号的坏版本

这在Python中首先是完全不必要的,因为字节总是无符号的。但是如果你真的想要它,你可以把x | 0xffffff00格式化成十六进制(它将用6ff填充字节)

相关问题 更多 >