当前位置: 首页 > 知识库问答 >
问题:

有没有一种紧凑的方法在Java中编码二进制文字数据?[重复]

鄢翰藻
2023-03-14

我可以用Java做这个

final byte[] b = new byte[]{0x01, 0x02, 0x04, 0x08,
                            (byte)0x80, 0x40, 0x20, (byte)0xff,
                            (byte)0xef, 0x40, 0x30, (byte)0xfe,
                            0x3f, (byte)0x90, 0x44, 0x78};

而在Python 2. x中,我可以使用

b = '\x01\x02\x04\x08\x80\x40\x20\xff\xef\x40\x30\xfe\x3f\x90\x44\x78'

Java语法是一个难题,需要(字节)强制转换来处理设置了最高有效位的值。

有没有更简单的方法?(除了编写一个帮助器类来将字符串(如“01020408804020ffef4030fe3f904478”转换为字节[]

共有1个答案

邹禄
2023-03-14

选择你的毒药。所有的选择都是痛苦的。
Java的字节类型是有符号的,而不是无符号的,这是可悲的。

>

byte[] b = {(byte)0x00, (byte)0x7F, (byte)0x80, (byte)0xFF};

带符号的十进制字节常量,以避免强制转换。但是很少有工具能够轻松地读写这种格式。在实践中可能没有用。

byte[] b = {0, 127, -128, -1};

通过助手函数进行字节到字节转换。它看起来确实整洁,对中等数据量很有帮助。

byte[] b = toBytes(new int[]{0x00, 0x7F, 0x80, 0xFF});

static byte[] toBytes(int[] x) {
    byte[] y = new byte[x.length];
    for (int i = 0; i < x.length; i++)
        y[i] = (byte)x[i];
    return y;
}

字符串到字节的转换。现在,每个字节只需使用2个字符(无逗号或0x),外加恒定的开销。

byte[] b = hexToBytes("007F80FF");

static byte[] hexToBytes(String s) {
    byte[] b = new byte[s.length() / 2];
    for (int i = 0; i < b.length; i++)
        b[i] = (byte)Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16);
    return b;
}

Base64编码的字符串。这甚至比#4更紧凑,但需要工作来编码。解码很容易使用java.util.Base64(JavaSE 8)。我有一个实际的例子,我在Java源代码中存储了一个Base64二进制Blob。

 类似资料:
  • 问题内容: 是否有任何特殊原因为什么不包括这种文字,而允许使用十六进制和八进制格式? 问题答案: Java 7包括它。检查新功能。 例:

  • 在解析文件时,我会遍历文件的列标题,看看其中一个是否等于(忽略大小写)compare和: 使用字符集读取该文件: 观察调试器会发现值是非紧凑字符串(UTF-16),而值是紧凑字符串(ASCII): 这是默认行为还是bug?如何使的计算结果为?

  • 问题内容: 我有Visio2007,我真的很喜欢。但是,它似乎没有Java的UML模型/数据类型。我可以为Java下载一些模板吗?还是我应该完全忘记Visio并获得一个Elipse插件? 谢谢! 问题答案: 后者是更好的选择,恕我直言。此外,我认为UML模型不应该特定于Java。我不知道周围是否有特定于Java的UML。 我在网上搜索时发现了这个。UML模型:MS Visio 2007。

  • 问题内容: 我想用二进制文字声明我的整数。Java可能吗? 问题答案: 从Java 7开始,您可以使用(或)形式将整数直接表示 为二进制数字 ,后跟一个或多个二进制数字(0或1)。例如,是整数42。与八进制和十六进制数字一样,二进制文字可能表示负数。 如果您没有Java 7,请使用以下命令: 还有其他输入整数的方法: 如十进制数字,。负十进制数,例如实际上是由一元否定运算的整数文字组成的表达式。

  • 问题内容: 我正在寻找一种将二进制数字转换为十六进制(JAVA)的方法。问题在于它不能使用预定义的方法来完成,而我只是不知道如何去做。我已经尝试了一些方法,但是使我无法接受包含字符的十六进制数。 提前致谢! 问题答案: 根据您的要求,首先必须将二进制no转换为十进制,然后转换为十六进制。因此,请尝试按照您的要求运行该程序: 如果您有任何疑问,请告诉我。 谢谢…

  • 我之前问过这个问题,但是没有得到我想要的答案。经检查,这是我的错,因为我没有明确我的目标是什么,我很抱歉。我正在为一个AP统计类编写代码,我在其中必须生成没有重复的随机数据。TI计算器使用Lua,所以我希望我能制作一个程序,不仅生成数字,还能回答我的问题,只是为了缩短所需的时间。作业的名称是“ESP”为了时间的缘故,我会缩短场景,有两个人,艾米和本,他们在两张索引卡上写上名字,然后把他们的卡片放在