在C中有一个转义序列,可以将十六进制(或二进制)值嵌入到字符串中?这样的事情。
String str = "12345" + "\x0B" + "Some additional text";
Java中是否有类似的功能?
答案 0 :(得分:5)
目前尚不清楚你想要实现的目标。 Java中的String
只是一系列UTF-16代码单元(通常表示“一系列字符”,但{{3>以外的字符需要两个UTF-16代码单元)。如果你也需要二进制数据,则不应使用字符串。
现在你可以使用\u000b
在字符串中包含Unicode字符U + 000B(行列表) - 但是你需要确保它实际上是你想要做的。
如果您实际尝试混合文本数据和二进制数据,我建议您不要这样做 - 它非常很容易丢失数据或转换它厉害。如果您提供实际要求,我们可能会帮助您提供更好的解决方案。
答案 1 :(得分:3)
在Java中,您可以使用Integer.toString(int i, int radix)
。
对于十六进制,这是
String str = "12345" + Integer.toString(0x0B, 16) + "Some additional text";
答案 2 :(得分:1)
在Java中,Strings
是Unicode文本。它们无法嵌入任意二进制数据。如果需要,您可以嵌入Unicode U + 000B LINE TABULATION字符:
String str = "12345\u000BSome additional text";
答案 3 :(得分:0)
如前所述,Java 字符串是 Unicode,因此为 2 个字节,并在内部表示为 char[]
。
@Jon Skeet 是对的 saying “如果您还需要二进制数据,则不应使用字符串”(但 Jon Skeet 总是< /em> 对 ;)):您应该使用 byte[]
。
但是,如果您真的需要使用字符串来存储二进制数据(因为它有时超出您的控制范围),Charset
会将您的字符串编码为 {{3 }}。事实证明,byte[]
会将 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]
所以你可以使用 ISO-8859-1 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