繁体   English   中英

将十六进制(或二进制)数据放入 Java 字符串

[英]Putting hex (or binary) data into Java strings

在 C 中有一个转义序列可以让您将十六进制(或二进制)值嵌入到字符串中? 像这样的东西。

String str = "12345" + "\x0B" + "Some additional text";

Java中是否有类似的功能?

目前尚不清楚您要实现的目标。 Java 中的String只是UTF-16 代码单元的序列(通常表示“字符序列”,但基本多语言平面之外的字符需要两个 UTF-16 代码单元)。 如果您还需要其中的二进制数据,则不应使用字符串。

现在您可以使用\ 在字符串中包含 Unicode 字符 U+000B(行制表) - 但您需要确保这实际上是您想要做的。

如果您实际上尝试混合文本数据和二进制数据,我建议您不要这样做 -容易丢失数据或转换错误。 如果您提供您的实际需求,我们或许能够帮助您提出更好的解决方案。

在 Java 中,您可以使用Integer.toString(int i, int radix)

对于十六进制,这是

String str = "12345" + Integer.toString(0x0B, 16) + "Some additional text";

在 Java 中, Strings是 Unicode 文本。 它们不能嵌入任意二进制数据。 如果需要,您可以嵌入 Unicode U+000B LINE TABULATION 字符:

String str = "12345\u000BSome additional text";

如前所述,Java 字符串是 Unicode,因此是 2 个字节,并在内部表示为char[]

@乔恩飞碟双向是正确的说, “如果你在有需要的二进制数据,以及,你不应该使用一个字符串”(后来乔恩斯基特永远是对的;)):你应该使用一个byte[]

但是,如果您确实需要使用 String 来存储二进制数据(因为它有时超出您的控制范围),则Charset会将您的 String 编码为byte[] 和原来的ISO-8859-1字符集将一个映射char到单byte

String str = "aéç";
System.out.println(Arrays.toString(str.getBytes(StandardCharsets.ISO_8859_1)));
System.out.println(Arrays.toString(str.getBytes(StandardCharsets.UTF_8)));
System.out.println(Arrays.toString(str.getBytes(StandardCharsets.UTF_16)));

给出:

[97, -23, -25]
[97, -61, -87, -61, -89]
[-2, -1, 0, 97, 0, -23, 0, -25]

因此,您可以使用String(byte[], Charset)构造函数来存储二进制数据:

String str = "12345_Some additional text"; // '_' for the replacement character
byte[] hack = str.getBytes(StandardCharsets.ISO_8859_1);
hack[5] = 0x0B; // Change it here
str = new String(hack, StandardCharsets.ISO_8859_1); // Put it back

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM