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

将十六进制(或二进制)数据放入Java字符串,java,Java,在C语言中有一个转义序列,可以让您将十六进制(或二进制)值嵌入到字符串中?像这样的 String str = "12345" + "\x0B" + "Some additional text"; Java中有类似的函数吗?在Java中,字符串是Unicode文本。它们不能嵌入任意二进制数据。如果需要,可以通过以下方式嵌入Unicode U+000B行制表字符: String str = "12345\u000BSome additional text"; 在Java中,您可以使用 对于十六进

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

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

Java中有类似的函数吗?

在Java中,
字符串是Unicode文本。它们不能嵌入任意二进制数据。如果需要,可以通过以下方式嵌入Unicode U+000B行制表字符:

String str = "12345\u000BSome additional text";
在Java中,您可以使用

对于十六进制,这是

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

现在还不清楚你想要实现什么。Java中的
String
只是一个UTF-16代码单元序列(通常意味着“一个字符序列”,但字符串之外的字符需要两个UTF-16代码单元)。如果您还需要二进制数据,则不应使用字符串

现在,您可以使用
\u000b
将Unicode字符U+000B(行列表)包含在字符串中,但您需要确保这正是您想要做的


如果你真的试图混合文本数据和二进制数据,我建议你不要这样做——数据很容易丢失或转换不好。如果您提供您的实际需求,我们可能会帮助您提出更好的解决方案。

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

@Jon Skeet是对的“如果你也需要二进制数据,你不应该使用字符串”(但是Jon Skeet总是对的;):你应该使用
字节[]

但是,如果您确实需要使用字符串来存储二进制数据(因为它有时不在您的手中),a将把您的字符串编码为。结果将把一个
字符
映射到一个
字节

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 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

Hi Jon:我承认你不应该将二进制代码嵌入Java字符串中,我也很清楚30年的嵌入式系统编程经验会导致什么问题,但在这种情况下,这将是一个方便的解决方案。我将重写代码,将该文件视为具有嵌入ASCII字符的二进制文件-Joe@JoeCullity对不起,说你有“30年+[经验]”听起来很幼稚,因为你问的是一个基本的问题,而你似乎不理解“只使用
\u000b
”的基本答案。你做某事的年数似乎并没有让你变得更聪明:)