java - java vs python 中获取十六进制字符串表示的二进制数据

标签 java python

我知道在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.为什么我得到不同的结果?

  • 为什么我在 python 中得到的输出带有“\”标记?
  • 最佳答案

    结果的第一个十六进制“'”正好是有符号字符中的 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]
    

    关于java - java vs python 中获取十六进制字符串表示的二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849854/

    相关文章:

    java - 如何知道java方法正在阻塞当前线程

    java - foreach 循环不适用于打开的弹出窗口

    python - 读取后从txt文件中删除行

    python - "Data source name not found and no default driver specified" Access ODBC

    java - 如何将postgres脚本传输到hsqldb脚本?

    java - 检索 ArrayList 作为 session 属性

    java - Arrays.sort 在不触发垃圾收集的情况下对二维数组进行排序?

    python - 使用 Django webapp 登录 Azure

    python - Django 'null value in column'

    python:pandas安装错误