转义两个零旁边的空字节

Gal*_*ala 25 java unicode-escapes

我需要转义以下定义为静态final的序列

final String POSIX_SIGNATURE = "ustar".concat("\0").concat("00");
Run Code Online (Sandbox Code Playgroud)

如何在不使用.concat()方法和+字符串运算符的情况下转义它?

final String POSIX_SIGNATURE = "ustar\000"; 
Run Code Online (Sandbox Code Playgroud)

这是无效的,与第一个不同.

final String POSIX_SIGNATURE = "ustar\0\00"; 
Run Code Online (Sandbox Code Playgroud)

也不是这个.

Dar*_*oid 23

使用unicode转义序列:

"\u000000"
Run Code Online (Sandbox Code Playgroud)

这是NUL字符(\u0000),后跟两个0.

  • 考虑到这个的可读性,我会留下`"\ 0"+"00"`这是一个编译时常量,所以编译后的代码将是相同的. (3认同)

rge*_*man 21

Darth Android有解决方案,但这就是你尝试不按预期方式工作的原因.

空字符表示的原因\0不是因为它是一个特殊的转义序列,只是对于空字符; 这是因为它是一个最多3个八进制数字八进制转义序列.

你的字符串末尾"ustar\000"有1个空字符\000,你的字符串末尾"ustar\0\00"有2个空字符,\0\00.

解决方案如前所述,由Darth Android提供 - 使用Unicode转义符,它具有正好4个十六进制数字,因此额外的0字符只是 - 0字符.该\u0000是空字符,以及第5和第6 0s为文字0字符.


Pau*_*ton 15

你也可以使用

"ustar\00000"
Run Code Online (Sandbox Code Playgroud)

\可以跟随最多3个八进制数字(在000和之间377),所以\000接下来是"00".

或者,你可以做到

"ustar\0\600"
Run Code Online (Sandbox Code Playgroud)

\0之后\60(八进制为'0'后面)'0'.