【问题标题】:python jpype get value from instance of java classpython jpype从java类的实例中获取值
【发布时间】:2020-04-23 18:48:17
【问题描述】:

我有一个类似的代码

message = "abc".encode()
messageDigest = java.security.MessageDigest.getInstance("SHA-256")
messageDigest.update(message)
hashdata = messageDigest.digest()

当我打印hashdata 时,我得到<<java class 'byte[]'> at 0x7f1ee005df60>

但我需要它的价值。我怎样才能得到它的价值?

【问题讨论】:

  • 这样使用..String hashdata = new String(messageDigest.digest());

标签: java python jpype


【解决方案1】:

试试这个

for (int i = 0; i < hash.length; i++) {
    if ((0xff & hash[i]) < 0x10) {
        hexString.append("0"
                + Integer.toHexString((0xFF & hash[i])));
    } else {
        hexString.append(Integer.toHexString(0xFF & hash[i]));
    }
}

【讨论】:

    【解决方案2】:

    目前我们不支持 Java 字节数组的 __bytes__ 运算符,但使用自定义程序很容易添加。

    import jpype
    from jpype import java
    
    # Add the customizer before starting the JVM
    @jpype.JImplementationFor('byte[]')
    class ByteConverter(object):
        def __bytes__(self):
            return bytes(self[:])
    
    # Now start the JVM
    jpype.startJVM(convertStrings=False)
    
    # Perform Java operations
    message = "abc".encode()
    messageDigest = java.security.MessageDigest.getInstance("SHA-256")
    messageDigest.update(message)
    hashdata = messageDigest.digest()
    
    # We got back a Java byte[] and we would like a Python bytes
    print(bytes(hashdata))
    

    【讨论】:

      猜你喜欢
      • 2014-06-22
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      相关资源
      最近更新 更多