0

I wish to append a byte i.e. 16 = 0x10 to a String, using escape sequence to do it in single line of code:

String appendedString = new String('\16'+"String");

This results in a hex representation of appendedString = 0x0E,0x74,0x72,0x69,0x6E,0x67

using a \2 like this:

String appendedString = new String('\2'+"String");

works fine resulting in a hex representation of appendedString = 0x02,0x74,0x72,0x69,0x6E,0x67

using a \10:

String appendedString = new String('\10'+"String");

results in a hex representation of appendedString = 0x08,0x74,0x72,0x69,0x6E,0x67

Someone may kindly explain this and suggest a solution. Thanks.

4

2 回答 2

2

\10八进制的,这就是你得到 U+0008 的原因。

我不相信有任何使用十进制的转义格式;我建议\uxxxx对支持的字符(等)使用格式或特定的转义\r序列\n。因此,对于第二种情况,您可以使用\u000a- 或仅\n在这种情况下使用。首先,您将使用\u0010.

有关转义序列的更多详细信息,请参阅JLS 的第 3.10.6 节。

我还强烈建议您停止将这些视为字节 - 它们是字符(或 UTF-16 代码单元,如果您想要非常精确的话)。

于 2013-09-24T16:30:04.247 回答
0

问题是您使用的是八进制转义。Java 语言规范第3.10.6 节定义了转义,包括八进制转义。

OctalEscape: \ OctalDigit \ OctalDigit OctalDigit \ ZeroToThree OctalDigit OctalDigit

因此,\16字符14是十进制还是0x0E十六进制。

字符\2保持2十进制和十六进制。

字符\108十进制或0x08十六进制。

要使用十六进制转义,请使用JLS 第 3.3 节中定义的 Unicode 转义:

Unicode转义:

\ UnicodeMarker HexDigit HexDigit HexDigit HexDigit

Unicode 标记:

u
UnicodeMarker u

\u0016\u0002\u0010

于 2013-09-24T16:31:50.237 回答