【问题标题】:getting the binary data represented by the hexadecimal string back in java vs python在java vs python中获取由十六进制字符串表示的二进制数据
【发布时间】:2017-10-20 13:12:57
【问题描述】:

我知道在 python binascii.unhexlify(initValue) 返回十六进制字符串表示的二进制数据。

我正在尝试将 binascii.unhexlify(initValue) 转换为 java。

我在 java 中尝试了以下代码行,但得到的结果与 python 中的代码不同:

 DatatypeConverter.parseHexBinary(value);

我运行以下示例:

我的输入 - 十六进制字符串:

 value = '270000f31d32d1051400000000000000000000000006000000000000000000000000000000000000'

在python中运行时:

 result = binascii.unhexlify(value)

我得到:

    result = "'\x00\x00\xf3\x1d2\xd1\x05\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

在java中运行时:

 byte[] bytes = DatatypeConverter.parseHexBinary(value);

我得到:

   bytes = [39, 0, 0, -13, 29, 50, -47, 5, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

1.为什么我得到不同的结果?

  1. 为什么我在 python 中得到带有'\'标记的输出?

【问题讨论】:

  • 你能做到吗? @chx3 下面给出的答案是给出响应,但字节看起来与 Java 中的生成不同。你有没有找到其他方法来获得类似的输出?

标签: java python


【解决方案1】:

结果的第一个十六进制“'”在有符号字符中正好是 39。在 python 中,可以使用内置函数 ord("'") 得到 39。 你可能可以在这个 python 代码中得到你想要的东西

value = '270000f31d32d1051400000000000000000000000006000000000000000000000000000000000000'
result = binascii.unhexlify(value)
bytes = [ord(x) for x in result]

你会得到这个无符号字符:

[39, 0, 0, 243, 29, 50, 209, 5, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

【讨论】:

    猜你喜欢
    • 2014-07-15
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2010-11-17
    • 1970-01-01
    • 2020-02-26
    • 2017-11-19
    相关资源
    最近更新 更多